こちらの機能を利用して 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 件のコメント:
コメントを投稿