#include <iostream>
#include <tuple>
int main(){
auto bt=std::make_tuple(std::tuple<>(),std::tuple<std::tuple<>>()); //Line 1
auto bt2=std::make_tuple(std::tuple<>(),std::tuple<>()); //Line 2
}
लाइन 2 संकलन त्रुटि क्यों देता है जबकि लाइन 2 ठीक से संकलित करता है? (जीसीसी & क्लैंग दोनों में परीक्षण किया गया)खाली नेस्टेड टुपल्स त्रुटि
क्या कोई संभावित कामकाज है? जैसे आप libstdc में एक बग मिला
बजना
/usr/include/c++/4.6/tuple:150:50: error: ambiguous conversion from derived class 'std::_Tuple_impl<0, std::tuple<>,
std::tuple<std::tuple<> > >' to base class 'std::_Head_base<0, std::tuple<>, true>':
struct std::_Tuple_impl<0, class std::tuple<>, class std::tuple<class std::tuple<> > > -> _Tuple_impl<0UL + 1, class std::tuple<class std::tuple<> > > -> _Head_base<1UL, class std::tuple<class std::tuple<> >, std::is_empty<class tuple<class tuple<> > >::value> -> class std::tuple<class std::tuple<> > -> _Tuple_impl<0, class std::tuple<> > -> _Head_base<0UL, class std::tuple<>, std::is_empty<class tuple<> >::value>
struct std::_Tuple_impl<0, class std::tuple<>, class std::tuple<class std::tuple<> > > -> _Head_base<0UL, class std::tuple<>, std::is_empty<class tuple<> >::value>
_Head& _M_head() { return _Base::_M_head(); }
^~~~~
/usr/include/c++/4.6/tuple:173:33: note: in instantiation of member function 'std::_Tuple_impl<0, std::tuple<>,
std::tuple<std::tuple<> > >::_M_head' requested here
_Base(std::forward<_Head>(__in._M_head())) { }
^
/usr/include/c++/4.6/tuple:334:9: note: in instantiation of member function 'std::_Tuple_impl<0, std::tuple<>,
std::tuple<std::tuple<> > >::_Tuple_impl' requested here
: _Inherited(static_cast<_Inherited&&>(__in)) { }
^
gcc_bug.cpp:5:10: note: in instantiation of member function
'std::tuple<std::tuple<>, std::tuple<std::tuple<> > >::tuple' requested here
auto bt=std::make_tuple(std::tuple<>(),std::tuple<std::tuple<>>());
^
1 error generated.
यह जीसीसी या बजना में एक बग हो सकता है (ध्यान दें कि, इस टपल <> प्रकार के लिए केवल का सहारा समाधान है, यह KennyTM द्वारा वर्णित वास्तविक समस्या है, यानी
struct A{}; auto d = std::tuple<std::tuple<std::tuple<A, A>, A>, A>{};
अभी भी संकलन नहीं है समाधान नहीं करता है)? आपका कोड विजुअल स्टूडियो 2010 के साथ संकलित करता है। वैसे, आप दो बार बीटी घोषित कर रहे हैं, क्या इसका इरादा है? –इसके अलावा, क्या आप संकलन त्रुटि संदेश इंगित कर सकते हैं? –
क्षमा करें, छोटी गाड़ी लाइन 1 टिप्पणी की गई थी। मैं नाम बदलना भूल गया, अब संपादित किया गया। – dunedain