前提・実現したいこと
畳み込み式を使って以前にスカラーの数をカウントする方法を教えていただいたのですが,次のコードになると,test_arg1とtest_arg2とでは動作が異なるのです。対処方法がわかりません。できればどこに問題があるのかも教えていただければ,幸いです。ご教示いただけるかたお願いします。
発生している問題・エラーメッセージ
Static_assert failed due to requirement 'size == 3'
該当のソースコード
C++
1struct test_arg2{ 2 template < typename... Args> 3 auto operator()( Args&&... args ){ 4 constexpr int size = ( std::is_scalar_v<Args> + ... +0); 5 static_assert(size==3);//sizeは0 6 } 7}; 8 9template<typename... Args> 10struct test_arg1{ 11 test_arg1(Args&&... args){ 12 constexpr int size = ( std::is_scalar_v<Args> + ... +0); 13 static_assert(size==3);//ここはOK 14 test_arg2 f; 15 f(args...); 16 } 17}; 18 19int main (){ 20 test_arg1 f(1,1,1,vector{a3} ); 21} 22
試したこと
次のように直接呼び出すとうまくいきます。
C++
1int main(){ 2 test_arg2 g; 3 g(1,1,1,vector{a3} ); 4}
補足情報(FW/ツールのバージョンなど)
clang
c++17
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/08 11:55