代码之家  ›  专栏  ›  技术社区  ›  mukeshkumar

为什么在显式实例化类模板之前需要显式实例化外部类模板

  •  2
  • mukeshkumar  · 技术社区  · 14 年前

    我的问题是以下线索: specialize a member template without specializing its parent

    我完全同意标准说这样做是违法的。但我想明白 为什么这样做是违法的 ? 如果允许的话会有什么影响?

    1 回复  |  直到 7 年前
        1
  •  2
  •   GManNickG    14 年前

    也许是因为这样的原因:

    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;