こちらの機能を利用して iutest のコードを書いていたのですが、
これダメなのか~と思うことがあったのでブログに残しておきます。
こちらがそのコード。
#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; }
() でくくったらダメなんですね。
やりたかったこととしては、マクロ引数に初期化リストを渡したかっただけなので、
可変長引数を使うようにしました。
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})); }
↓
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 件のコメント:
コメントを投稿