带有括号的“嵌套”类模板参数推导:GCC与clang

时间:2019-01-25 16:56:04

标签: c++ templates compiler-errors language-lawyer c++17

相关,但(恕我直言)不同:Nested template argument deduction for class templates not working

以下C ++ 17代码被GCC 8拒绝,但是clang对其进行编译没有任何问题。 GCC的错误消息作为注释包含在有问题的行之前。

哪个编译器在这里正确?

https://godbolt.org/z/WG6f7G

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});// ({})
}

1 个答案:

答案 0 :(得分:2)

对此问题的评论指出这是GCC错误。它已作为GCC错误报告89062归档。