में संकलित करने के लिए विफल रहता है मैं कोड है जो निम्न करने पर निर्भर करता है:आंशिक विशेषज्ञता VS2005
template <typename T> struct Foo {};
template <typename T, const Foo<T>& I> struct FooBar {};
////////
template <typename T> struct Baz {};
template <typename T, const Foo<T>& I>
struct Baz< FooBar<T,I> >
{
static void func(FooBar<T,I>& value);
};
////////
struct MyStruct
{
static const Foo<float> s_floatFoo;
};
// Elsewhere: const Foo<float> MyStruct::s_floatFoo;
void callBaz()
{
typedef FooBar<float, MyStruct::s_floatFoo> FloatFooBar;
FloatFooBar myFloatFooBar;
Baz<FloatFooBar>::func(myFloatFooBar);
}
यह सफलतापूर्वक जीसीसी के तहत संकलित है, तथापि, VS2005 के तहत, मैं मिलता है:
error C2039: 'func' : is not a member of 'Baz<T>'
with
[
T=FloatFooBar
]
error C3861: 'func': identifier not found
हालांकि, अगर मैं const Foo<T>& I
const Foo<T>* I
करने के लिए बदल (I
सूचक द्वारा नहीं बल्कि संदर्भ द्वारा से गुजर रहा है), और के रूप में परिभाषित करने FloatFooBar
:
typedef FooBar<float, &MyStruct::s_floatFoo> FloatFooBar;
दोनों जीसीसी और वीएस2005 खुश हैं।
क्या चल रहा है? क्या यह किसी प्रकार का सूक्ष्म टेम्पलेट प्रतिस्थापन विफलता है कि वीएस2005 जीसीसी, या एक कंपाइलर बग के लिए अलग-अलग हैंडलिंग कर रहा है?
(अजीब बात: मैं सोचा मैं ऊपर कोड पहले आज सुबह VS2005 में काम कर रहा था लेकिन वह अपनी सुबह की कॉफी पहले था अब मैं पूरी तरह से कुछ नहीं मैं caffeine- किसी प्रकार के तहत नहीं था हूँ।। लालसा प्रेरित प्रलाप ...)
कोड ठीक लगता है। वीएस2005 में एक बग की तरह लग रहा है। –
कोड आओउ ऑनलाइन के साथ संकलित करता है, तो शायद यह ठीक है, वीएस2005 – rotoglup