発生している問題
次のコードで,test1の場合はエラーは出ないのですが,test2にすると,エラーが出ます。いずれの組合せでも動作すると理解していたのですが,ちょっと理解できなくりました。どなたか教えてください。
該当のソースコード
C++
1namespace test1{ 2 3int funcA(int t, std::function<int(int)>f){ 4 return f(t); 5} 6int funcB(int t, int(*f)(int)){ 7 return f(t); 8} 9int funcC(int t, int f(int) ){ 10 return f(t); 11} 12} 13 14namespace test2{ 15 16template<typename T> 17T funcA(T t, std::function<T(T)>f){ 18 return f(t); 19} 20template<typename T> 21T funcB(T t, T(*f)(T)){ 22 return f(t); 23} 24template<typename T> 25T funcC(T t, T f ){ 26 return f(t); 27} 28} 29 30int a(int x){return x;}; 31auto b=[](int x){return x;}; 32 33 34int main() { 35 using namespace std; 36 37 using namespace test1; 38 39 cout << funcA(10,a)<<'\n';// test2にするとエラー 40 cout << funcB(10,a)<<'\n'; 41 cout << funcC(10,a)<<'\n';// test2にするとエラー 42 43 cout << funcA(10,b)<<'\n';// test2にするとエラー 44 cout << funcB(10,b)<<'\n';// test2にするとエラー 45 cout << funcC(10,b)<<'\n';// test2にするとエラー 46 47 48 return 0; 49} 50 51
試したこと
さらにtest3で試すと funcA とa b, funcBとbの組合せでエラーになって,
test2と状況が異なります。
C++
1 2namespace test3{ 3template<typename T,typename C> 4T funcA(T t, std::function<C(C)>f){ 5 return f(t); 6} 7template<typename T,typename C> 8T funcB(T t, C(*f)(C)){ 9 return f(t); 10} 11template<typename T,typename C> 12T funcC(T t, C f ){ 13 return f(t); 14} 15}
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/25 06:32
2020/07/25 06:44 編集
2020/07/25 07:16