我遇到了一些困扰我的代码。我把混乱归结为一个简单的案例
template<typename T>
struct S
{
T member;
static const size_t size;
};
struct U { int i; };
typedef S<U> US_t;
template<> const size_t US_t::size = sizeof(U);
Q1:为什么我需要&#34; template<>
&#34;在最后一行,因为US_t
被完整描述了?
我实际遇到的代码 - 编译 - 具有相同的代码:
template<>template<> const size_t US_t::size = sizeof(U);
我很确定这是一个剪切和粘贴的错误,因为它已经编译而没有被捕获。
Q2:这有效吗?如果是这样,为什么?
[我注意到codepad.org将使用&#34; template<>template<>
&#34;编译代码。]
答案 0 :(得分:0)
想象一下你的typedef是一个在编译时而不是预处理器时间扩展的宏。
然后没有template<>
你有
const size_t S<U>::size = sizeof(U);
这不是有效的语法,因为您正在进行模板专业化