5

考虑以下 C++ 代码:

template <class T>
class Singleton {};

class ConcreteSingleton : public Singleton<ConcreteSingleton> {
    template <class T>
    friend class Singleton;
};

int main() {}

Singleton应该是以下的朋友ConcreteSingleton

它适用于微软的可视化 C++ 编译器。但是,我不能用 g++ 4.8.4 编译它。错误是:

   error: specialization of ‘Singleton<ConcreteSingleton>’ after instantiation
       template <class T> friend class Singleton;

有什么办法可以解决吗?

4

1 回答 1

3

这是GCC 错误 #52625

从其评论中窃取的解决方法:

   template <class T>
   friend class ::Singleton;
//              ▲▲

我已经验证您的代码不起作用,而这段代码也起作用。

于 2015-09-28T09:43:39.030 回答