Consider the following snippet:
struct S {
S() {}
template<typename B>
struct T {
T(B &&) {}
};
template<typename B>
T(B &&) -> T<B>;
};
int main() {
S::T t{0};
}
Clang 接受 了它,而GCC则用以下错误信息拒绝了这段代码:
prog.cc:10:5: error: deduction guide 'S::T(B&&) -> S::T' must be declared at namespace scope
这是有效的代码吗?哪个编译器是正确的,GCC还是Clang?