【发布时间】:2021-08-16 03:01:38
【问题描述】:
关于显式特化的语法
显式专业化:
模板 声明
声明:
- 块声明
- nodeclspec-function-declaration
- ...
- 显式实例化
- ...
声明可以是任何对其语法有效的声明。考虑这个例子
template<class T>
struct A{
template<class Y>
struct B{};
};
template<>
template struct A<int>::B<int>; //declaration: explicit-instantiation
GCC 和 Clang 都无法识别 syntax。限制声明不能显式实例化的规则在哪里?
【问题讨论】:
-
在
A的显式特化中,没有迹象表明它应该有一个内部B。 -
@cigien 这是一个声明,根据 [dcl.dcl#dcl.pre-1],
declaration: explicit-instantiation。您的链接无法打开。 -
@jxh
A<int>是一种特化,它会导致该特化的隐式实例化。template<> template<> struct A<int>::B<int>{};有效。 -
也许我今天很慢,但声明不应该是
template<> template <> struct A<int>::B<int>;吗? (注意第二次使用template关键字后额外的<>对)。 -
@xmh0511 我承认有点困惑。您希望两种不同的语法具有相同的语义吗?
标签: c++ language-lawyer