相关疑难解决方法(0)

扣除指南,模板和子对象:哪个编译器是对的?

请考虑以下代码段:

struct S {
    S() {}

    template<typename B>
    struct T {
        T(B &&) {}
    };

    template<typename B>
    T(B &&) -> T<B>;
};

int main() {
    S::T t{0};
}
Run Code Online (Sandbox Code Playgroud)

Clang 接受它,而GCC 拒绝代码时出现以下错误:

prog.cc:10:5:错误:演绎指南'S :: T(B &&) - > S :: T'必须在命名空间范围内声明

这是有效的代码吗?哪个编译器是对的,GCC还是Clang?

c++ templates language-lawyer template-argument-deduction c++17

11
推荐指数
1
解决办法
358
查看次数