के बीच टर्नरी ऑपरेटर के कॉन्स्ट संदर्भ के पते पर अंतर मुझे क्या हो रहा है इसका एक अस्पष्ट विचार है ... और इसे this के साथ करना है, लेकिन मुझे आश्चर्य है कि क्यों clang ++ और g ++ इसे अलग-अलग संभालते हैं। यहां अपरिभाषित व्यवहार कहां है? नोट: इसका टेम्पलेट्स से कोई लेना-देना नहीं है - उदाहरण के लिए मैं उदाहरण का अधिक कॉम्पैक्ट बनाने के लिए उनका उपयोग करता हूं। यह सब whatever
के प्रकार के बारे में है।क्लैंग और जीसीसी
#include <iostream>
#include <vector>
template <typename T>
void test()
{
T whatever = 'c';
const char a = 'a';
std::cout << "begin: " << (void*)&a << std::endl;
const char & me = (true ? a : whatever);
std::cout << "ref: " << (void*)&me << std::endl;
}
int main(int argc, char**argv)
{
test<const char>();
test<char>();
return 0;
}
जीसीसी निर्गम (4.9.3 अप करने के लिए परीक्षण किया):
begin: 0x7fffe504201f
ref: 0x7fffe504201f
begin: 0x7fffe504201e
ref: 0x7fffe504201f
बजना 3.7.0 उत्पादन:
begin: 0x7ffed7b6bb97
ref: 0x7ffed7b6bb97
begin: 0x7ffed7b6bb97
ref: 0x7ffed7b6bb97
शायद 'char a' के लिए reducable; कॉन्स चार बी; कॉन्स चार और आर = (सच? ए: बी); std :: cout << (& a == &r); ' –
जीसीसी 4.9.2 पर पुन: उत्पादित, 5.3.0 और 6.1 – krzaq
पर विफल हुआ जीसीसी 6.2.1 पर पुन: उत्पन्न करने में विफल। – Rakete1111