क्या निम्न प्रोग्राम अनुपालन C++ 11 है? यदि हां, तो क्या आप एक विशिष्ट एमएसवीसी बग के बारे में जानते हैं जो इसे ट्रिगर करता है? और/या एक संभावित काम के आसपास?MSVC2015 decltype पैरामीटर प्रकार ओवरलोडेड टेम्पलेट फ़ंक्शन
#include <iostream>
struct A {};
struct B {};
constexpr A aaa = {};
constexpr B bbb = {};
template <typename T>
void foo(T, decltype(aaa)) { std::cout << "a"; }
template <typename T>
void foo(T, decltype(bbb)) { std::cout << "b"; }
//^C2995 'void foo(T,unknown-type)': function template has already been defined
int main()
{
foo(0, aaa);
foo(0, bbb);
}
वास्तविक प्रकार decltype
के लिए प्रतिस्थापित रहे हैं तो यह काम करता है, लेकिन व्यवहार में इन प्रकार भी पुन: पेश करने जटिल हो जाते हैं और मैं उन्हें कल्पित नामों के लिए नहीं करना चाहते। निम्नलिखित मामूली संशोधन के साथ मेरे लिए
संकलित जीसीसी/क्लैंग के साथ ठीक है, और मुझे सामान नहीं दिख रहा है जो सी ++ 11 अनुरूप नहीं है। – Jarod42