2015-09-28 5 views
5

पर विचार करें निम्नलिखित सी ++ कोड:जी ++ त्रुटि: विशेषज्ञता इन्स्टेन्शियशन (मित्र के रूप में टेम्पलेट वर्ग) के बाद

यह माइक्रोसॉफ्ट के दृश्य C++ कम्पाइलर के साथ काम करता है:

template <class T> 
class Singleton {}; 

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

int main() {} 

Singleton एक दोस्त ConcreteSingleton की होगा। लेकिन, मैं इसे g ++ 4.8.4 के साथ संकलित नहीं कर सकता। त्रुटि है:

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

क्या इसे ठीक करने का कोई तरीका है?

+2

ओह, ऐसा लगता है [यह gcc bug] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52625)। – sergej

+1

एक्सकोड में ठीक काम करता है (सी ++ 14 के साथ ऐप्पल एलएलवीएम 7.0) –

+1

जी ++ 5.2.0 पर भी संकलित करने में विफल रहता है। क्लैंग में काम करता है। – user2079303

उत्तर

3

यह GCC bug #52625 है।

वर्कअराउंड अपनी टिप्पणी से चोरी:

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

मुझे लगता है कि your code doesn't work, और this code does सत्यापित किया है।

संबंधित मुद्दे