विजुअल स्टूडियो 2015 अपडेट 3 सी ++ 11 का बेहतर समर्थन, लेकिन मुझे अजीब समस्या है और मैं वर्कअराउंड की तलाश में हूं।MSVC2015 अद्यतन 3 वैरिएडिक टेम्पलेट वर्कअराउंड
टेम्पलेट प्रकार तर्क ("पूरी तरह परिभाषित प्रकार") के लिए एमएसवीसी के साथ विविधता-टेम्पलेट कोड को संकलित करते समय सभी अच्छे काम करते हैं, लेकिन यदि मैं टेम्पलेट टेम्पलेट तर्क ("आंशिक रूप से परिभाषित प्रकार") का उपयोग करना चाहता हूं, तो परिणाम गलत हो जाता है।
#include <iostream>
using namespace std;
template <template<typename> class... TS>
struct PARTIAL {
static void test(std::ostream& out)
{
out << "PARTIAL-PROBLEM" << endl;
}
};
template <template<typename> class T>
struct PARTIAL<T>{
static void test(std::ostream& out)
{out << "PARTIAL-OK-END" << endl;}
};
template <template<typename> class T, template<typename> class... TS>
struct PARTIAL<T, TS...>{
static void test(std::ostream& out)
{
out << "PARTIAL-OK" << endl;
PARTIAL<TS...>::test(out);
}
};
template <class... TS>
struct FULL {
static void test(std::ostream& out)
{
out << "FULL-PROBLEM" << endl;
}
};
template <class T>
struct FULL<T>{
static void test(std::ostream& out)
{out << "FULL-OK-END" << endl;}
};
template <class T, class... TS>
struct FULL<T, TS...>{
static void test(std::ostream& out)
{
out << "FULL-OK" << endl;
FULL<TS...>::test(out);
}
};
template <typename T>
struct B{};
int main()
{
FULL<int, int, int>::test(cout);
PARTIAL<B, B, B>::test(cout);
return 0;
}
GCC5.3 के उत्पादन (MinGW):
FULL-OK
FULL-OK
FULL-OK-END
PARTIAL-OK
PARTIAL-OK
PARTIAL-OK-END
MSVC के उत्पादन:
FULL-OK
FULL-OK
FULL-OK-END
PARTIAL-OK
PARTIAL-OK
PARTIAL-OK
PARTIAL-PROBLEM
MSVC पूर्ण परिभाषित प्रकार और partials के लिए कोड अलग तरह से पैदा करता है। इसका सबसे अच्छा काम क्या होना चाहिए?
here is demo that works good on GCC
मेरे लिए एक बग की तरह लग रहा। – Arunmu
समस्या को और स्पष्ट करने के लिए '-OK-TERMINATE'' के साथ टर्मिनिंग केस में '-OK' को बदलें। साथ ही, समस्या को अपने कोड को कम करें: कोड जो काम करता है, एक मायने में, अनिच्छुक है। ध्यान दें कि वे "आंशिक प्रकार" नहीं बल्कि "टेम्पलेट टेम्पलेट पैरामीटर" हैं। – Yakk
अपडेट किया गया, मैं कामकाजी भाग को हटाना नहीं चाहता हूं। हो सकता है कि किसी को उपयोग-मामलों – Evgeniy