相关,但(恕我直言)不同:Nested template argument deduction for class templates not working
以下C ++ 17代码被GCC 8拒绝,但是clang对其进行编译没有任何问题。 GCC的错误消息作为注释包含在有问题的行之前。
哪个编译器在这里正确?
template<class T>
struct Foo {
Foo(T) {}
};
template<class T>
struct Bar {
Bar(T) {};
};
void works() {
Bar bar{1};// {}
Foo foo(bar);// ()
}
void works_too() {
Foo foo{Bar{1}};// {{}}
}
void error_in_gcc() {
// error: 'auto' parameter not permitted in this context
Foo foo(Bar{1});// ({})
}
void but_this_works() {
Foo(Bar{1});// ({})
}