निम्नलिखित में ...अग्रेषित constexpr तर्क के odr-उपयोग?
struct C {};
constexpr C c;
void g(C);
template<typename T>
void f(T&& t) {
g(std::forward<T>(t));
}
int main() {
f(c);
}
c
ओडीआर से इस्तेमाल किया है? क्यों नहीं?
निम्नलिखित में ...अग्रेषित constexpr तर्क के odr-उपयोग?
struct C {};
constexpr C c;
void g(C);
template<typename T>
void f(T&& t) {
g(std::forward<T>(t));
}
int main() {
f(c);
}
c
ओडीआर से इस्तेमाल किया है? क्यों नहीं?
in Richard's answer रूप में एक ही गति के माध्यम से जा रहे हैं, हम पाते हैं कि नहीं के लिए दूसरी शर्त जा रहा ओडीआर रूप से प्रयुक्त उल्लंघन किया जाता है, और इस तरह c
ओडीआर से इस्तेमाल किया है। विस्तार में, हालत पढ़ता है:
[एक चर
x
है ओडीआर रूप से प्रयुक्त एक अभिव्यक्तिex
जब तकx
एक वस्तु है और द्वारा]ex
एक अभिव्यक्तिe
, जहां के संभावित परिणामों के सेट का एक तत्व है या तो lvalue-to-rvalue रूपांतरणe
पर लागू होता है, याe
एक त्याग-मूल्य अभिव्यक्ति है।
स्टैंडर्ड से हमारे मामले x
में अपने c
है, और ex
आईडी अभिव्यक्ति c
है। केवल ex
का एकमात्र अभिव्यक्ति एक संभावित परिणाम आईडी-अभिव्यक्ति ex
है। यह न तो एक त्याग-मूल्य अभिव्यक्ति है, न ही इसका उपयोग करने वाला लालसा-से-रावल्यू रूपांतरण है (क्योंकि यह किसी संदर्भ से जुड़ता है)।
तो आप जिस प्रश्न से लिंक करते हैं उसका वास्तविक उत्तर क्या है? "हां यह ओडीआर-प्रयुक्त" और एक (+4) के लिए दो जवाब (+12 और +1) हैं "नहीं, यह नहीं है।" – Barry
@ बैरी: यही कारण है कि मैंने जवाब से लिंक किया, सवाल नहीं :-) –