请考虑以下代码段:
struct S {
S() {}
template<typename B>
struct T {
T(B &&) {}
};
template<typename B>
T(B &&) -> T<B>;
};
int main() {
S::T t{0};
}
prog.cc:10:5:错误:演绎指南'S :: T(B &&) - > S :: T'必须在命名空间范围内声明
这是有效的代码吗?哪个编译器是对的,GCC还是Clang?