Q&A
実現したいこと
次のコードは実行時に再帰するコードですが,なぜか,エラーは何も表示しないのに,コンパイルが終わりません。mac と ubuntu の両方で同じ現象です。
基本的なミスがあるとしても,文法上のエラーは出ないのは不思議です。
どこが問題なのか,どなたか教えていただけませんか。
該当のソースコード
C++
1#include <tuple> 2template<typename Tuple,typename Func> 3auto nRunMakeTupleLoop(std::size_t N,std::size_t D, Tuple&& tuple,Func func){ 4 auto ob = func(); 5 auto t = std::tuple_cat(std::forward<Tuple>(tuple), std::make_tuple(ob)); 6 if ( N == D ) 7 return t; 8 else 9 return nRunMakeTupleLoop(N, D+1,std::forward<decltype(t)>(t), func); 10} 11 12template<typename Func> 13auto nRunMakeTuple(std::size_t N,Func func){ 14 auto ob = func(); 15 auto tu = std::make_tuple(ob); 16 if ( N == 1 ) 17 return tu; 18 else 19 return nRunMakeTupleLoop(N,2, std::forward<decltype(tu)>(tu),func); 20} 21 22struct C{}; 23 24int main(int argc, char**argv){ 25 26 auto obs = nRunMakeTuple(3,[](){ 27 return new C; 28 }); 29 30 delete std::get<0>(obs); 31 delete std::get<1>(obs); 32 delete std::get<2>(obs); 33}
補足情報(FW/ツールのバージョンなど)
mac 13.2 clang
c++20 でコンパイル
ubuntu 22.04
gcc 11.3.0
コンパイルオプション -std=c++20
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/02/05 05:12
2023/02/05 08:49