क्यों constexpr फ़ंक्शन घोषणा पर विनिर्देशक परिभाषा के साथ मेल खाना चाहिए यदि यह केवल परिभाषाओं पर समझ में आता है, यानी केवल टीयू में दिखाई देने वाली घोषणा के साथ कार्य constexpr नहीं हो सकता है

c++
2
OwnageIsMagic 20 अगस्त 2021, 04:22

2 जवाब

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

मेरे कंपाइलर कार्यान्वयन में बग था। constexpr नेमस्पेस स्कोप में डिफ़ॉल्ट रूप से आंतरिक लिंकेज होता है, इसलिए

केवल TU में दिखाई देने वाली घोषणा के साथ कार्य करें

लिंक त्रुटि उत्पन्न करता है।

0
OwnageIsMagic 2 सितंबर 2021, 11:36

चूंकि मानक के लिए किसी भी संगत कार्यान्वयन की आवश्यकता होती है, इसका पालन करें

[dcl.constexpr] p1

अगर किसी फंक्शन या फंक्शन टेम्प्लेट की किसी डिक्लेरेशन में कॉन्स्टेक्स या कॉन्स्टेवल स्पेसिफायर है, तो उसके सभी डिक्लेरेशन में एक ही स्पेसिफायर होगा।

इसका मतलब यह है कि न केवल constexpr विनिर्देशक को एक टीयू में फ़ंक्शन की प्रत्येक घोषणा में दिखाना चाहिए, बल्कि प्रत्येक टीयू में भी होना चाहिए। यदि कोई अन्य विनिर्देश नहीं है, तो एक घोषणा भी एक परिभाषा हो सकती है।

1
xmh0511 20 अगस्त 2021, 02:08