我的问题是w.r.t以下主题:specialize a member template without specializing its parent
我对标准说这样做非常不合适。但我想了解为什么这样做是违法的?如果被允许会有什么影响?
答案 0 :(得分:2)
也许是因为这样的事情:
template <typename T>
struct foo
{
template <typename U>
struct bar
{
typedef U type;
};
};
template <typename T>
struct foo<T>::bar<int> // imaginary
{
typedef void type;
};
template <>
struct foo<float>
{
template <typename U>
struct bar
{
typedef U* type;
};
};
// is it void [foo<T>::bar<int>] or
// int* [foo<float>::bar<U>]?
typedef foo<float>::bar<int>::type ambiguous;
一个明智的解决方案是说“我们会让整个事情变得明确”。