2016-07-29 5 views
6

मैं बारे में कोई जानकारी नहीं मिल सकता है नया सी ++ 17 यदि प्रारंभकर्ता वाक्य रचना और 'constexpr अगर' में:क्या मानक है द्वारा मानक की गारंटी के साथ constexpr है? 'Constexpr (constexpr ऑटो एक्स = च(); एक्स) {}'

http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0128r1.html

फिर भी, वाक्य रचना बजना-HEAD द्वारा समर्थित है ...

constexpr auto f() { return true; } 
int main() { 
    if constexpr(constexpr auto x = f(); x) { } 
} 

ऑनलाइन यहाँ कोड ->http://melpon.org/wandbox/permlink/dj3a9ChvjhlNc8nr

है मानक द्वारा गारंटीकृत प्रारंभकर्ता के साथ, constexpr if केवल constexpr के साथ "if" है या इसकी गारंटी नहीं है और इसे मानक में स्पष्ट रूप से जोड़ा जाना चाहिए?

+0

इस बारे में एक चर्चा हुई कि हम इसे ईडब्ल्यूजी में चाहते हैं या नहीं, और बूस्ट के बारे में एक बिंदु है। हाना-शैली मेटाप्रोग्रामिंग * एक ही समय में दोनों सुविधाओं का उपयोग करके * काफी * सुधार किया गया है (जैसा कि केवल ' constexpr'), इसलिए यह सहमति हुई कि हम इसे चाहते हैं (लगभग हर किसी के साथ सहमत हैं और एक वोट के खिलाफ)। – Griwes

उत्तर

7

Selection statements with initializer प्रस्ताव if constexpr का उल्लेख है, और कहा है कि "if constexpr काम की सुविधाओं बस के रूप में अच्छी तरह से के साथ इस प्रस्ताव से विस्तारित if बयान"।

if के बारे में विनिर्देश N4606 [stmt.if] p3 में प्रारंभकर्ता के साथ विवरण स्पष्ट रूप से if constexpr का उपयोग करने की अनुमति देता है।

यहाँ N4606 [stmt.if] p3 कहते है:

एक अगर प्रपत्र

if constexpr[opt] (init-statement condition) statement 

के बयान

{ 
    init-statement 
    if constexpr[opt] (condition) statement 
} 

के बराबर है और एक करता है, तो के बयान है फॉर्म

if constexpr[opt] (init-statement condition) statement else statement 

{ 
    init-statement 
    if constexpr[opt] (condition) statement else statement 
} 
सिवाय इसके कि नाम init-बयान में घोषणा की उन हालत में घोषित रूप में एक ही कथात्मक क्षेत्र में हैं

के बराबर है।

+0

अच्छा जवाब, लेकिन N4606 का लिंक टूट गया है – Alejandro

संबंधित मुद्दे