こちらの機能を利用して iutest のコードを書いていたのですが、
これダメなのか~と思うことがあったのでブログに残しておきます。
こちらがそのコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <vector> template < typename T> void f(::std::initializer_list<T>) { } int main( int , char **) { f({1,2,3}); // OK //f(({1,2,3})); // NG ::std::vector< int > a = {1,2,3}; // OK //::std::vector<int> b = ({1,2,3}); // NG return 0; } |
() でくくったらダメなんですね。
やりたかったこととしては、マクロ引数に初期化リストを渡したかっただけなので、
可変長引数を使うようにしました。
1 2 3 4 5 6 7 8 9 10 11 |
template < typename T> void f(::std::initializer_list<T>) {} void f( int ) {} #define HOGE(x) f(x) void g() { HOGE(0); HOGE(({1, 2, 3})); } |
↓
1 2 3 4 5 6 7 8 9 10 11 |
template < typename T> void f(::std::initializer_list<T>) {} void f( int ) {} #define HOGE(...) f(__VA_ARGS__) void g() { HOGE(0); HOGE({1, 2, 3}); } |
0 件のコメント:
コメントを投稿