यह प्रश्न का अनुवर्ती है: void() में decltype(void()) का मतलब बिल्कुल सही है?


decltype(void()) ठीक से संकलित करता है और इस मामले में void() का अर्थ उपर्युक्त प्रश्न (वास्तव में उत्तर में) में समझाया गया है।
दूसरी तरफ, मैंने देखा कि decltype(void{}) संकलित नहीं होता है।

उनके बीच क्या अंतर है (कम से कम decltype के संदर्भ में)?
दूसरी अभिव्यक्ति संकलित क्यों नहीं होती है?


पूर्णता के लिए, यह एक न्यूनतम (नहीं-) कार्यशील उदाहरण का अनुसरण करता है:

int main() {
    // this doesn't compile
    //decltype(void{}) *ptr = nullptr;
    // this compiles fine
    decltype(void()) *ptr = nullptr;
    (void)ptr;
}
11
skypjack 3 सितंबर 2016, 00:01

1 उत्तर

सबसे बढ़िया उत्तर

sizeof के साथ प्रयोग किए जाने पर void() को टाइप-आईडी के रूप में समझा जाता है।
void() को decltype के साथ प्रयोग करने पर एक व्यंजक के रूप में व्याख्यायित किया जाता है।

मुझे नहीं लगता कि void{} किसी भी संदर्भ में मान्य है। यह न तो एक मान्य प्रकार-आईडी है और न ही एक मान्य व्यंजक।

5
R Sahu 3 सितंबर 2016, 00:13