sizeof...() 演算子の clang++ コンパイラからの奇妙な動作のように見えるものに遭遇しました。
template <typename... Args>
void test(tuple<Args...> t) {
cout << "size: " << sizeof...(Args) << endl;
}
...
test(make_tuple(1, 2)); // prints 'size: 10'
より標準的な方法は次のようになると思います。
template <typename... Args>
void test(tuple<Args...> t) {
cout << "size: " << tuple_size<tuple<Args...> >::value << endl;
}
test(make_tuple(1, 2)); // prints 'size: 2'
しかし、最初のバージョンで奇妙な値が得られる理由については、まだ興味があります。この場合、 sizeof...() の値は未定義ですか、それともコンパイラの動作がおかしいのでしょうか?