代码之家  ›  专栏  ›  技术社区  ›  Alexandre C.

模板友元和嵌套类

  •  2
  • Alexandre C.  · 技术社区  · 14 年前

    请考虑以下代码:

    template <typename T>
    struct foo
    {
        template <typename S>
        struct bar
        {
            template <typename> friend struct bar;
        };
    };
    

    foo<T>::bar 成为…的朋友 foo<T>::bar<S> 对于任何 S . 如果 bar 不是嵌套模板,上面的语法工作正常。但当我这样做的时候,例如

    int main() 
    {  
        foo<int> x;
    }
    

    MVC8(Visual C++ 2005)不喜欢它:

    1>.\main.cpp(11) : error C3855: 'foo<T>::bar': template parameter 'S' is incompatible with the declaration
    1>        .\main.cpp(12) : see reference to class template instantiation 'foo<T>::bar<S>' being compiled
    1>        .\main.cpp(14) : see reference to class template instantiation 'foo<T>' being compiled
    

    template <typename> friend struct foo<T>::bar;
    

    编辑:我仔细检查了一下(现在是早上,我还没完全清醒),这似乎是一个 VC8 bug :

    1 回复  |  直到 14 年前
        1
  •  2
  •   Kirill V. Lyadvinsky    14 年前

    类的友元或类模板的所有限制在第节中描述 14.5.3 Here 您可以在visualstudio中找到相关的bug。