【发布时间】:2018-11-09 01:41:37
【问题描述】:
考虑以下 sn-p:
struct S {
S() {}
template<typename B>
struct T {
T(B &&) {}
};
template<typename B>
T(B &&) -> T<B>;
};
int main() {
S::T t{0};
}
Clang accepts it 而 GCC rejects the code 出现以下错误:
prog.cc:10:5: error: deduction guide 'S::T(B&&) -> S::T' 必须在命名空间范围内声明
这是有效的代码吗?哪个编译器是正确的,GCC 还是 Clang?
【问题讨论】:
-
一点点bit more complex example 在 gcc 和 clang 中似乎仍然失败,所以不要对 clang 编译嵌套演绎指南的能力过于乐观:)
-
@W.F.显然 CTAD 不适用于模板类中的类;标准缺陷(请参阅我对链接答案的评论)。
标签: c++ templates language-lawyer c++17 template-argument-deduction