2016-07-29 26 views
6

nie może znaleźć informacji na temat nowych C++ 17, gdy inicjator składni i "constexpr czy in:Czy constexpr jest w przypadku inicjalizatora gwarantowanego przez standard? 'Constexpr (constexpr automatycznego x = f(); x) {}

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

niemniej jednak, składnia jest obsługiwana przez dzyń-Head ...

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

kod Internecie tutaj ->http://melpon.org/wandbox/permlink/dj3a9ChvjhlNc8nr

Czy constexpr if z inicjatorem gwarantowanym przez standard, ponieważ constexpr if to tylko "if z constexpr" lub nie jest gwarantowane i musi zostać jawnie dodane do standardu?

+0

odbyła się dyskusja na temat tego, czy chcemy tego czy nie w EWG, a punkt o Boost.Hana stylu METAPROGRAMOWANIE samopoczucia * * znacznie poprawić za pomocą obu funkcji jednocześnie (w przeciwieństwie do tylko o 'jeśli constexpr'), stąd też zgodzono się, że chcemy tego (prawie wszyscy się z nim zgadzają i jeden głos przeciw). – Griwes

Odpowiedz

7

Propozycja Selection statements with initializer wspomina if constexpr, i stwierdza, że ​​„z udogodnień if constexpr działać tak samo dobrze z rozszerzoną if oświadczenie tej propozycji”.

Specyfikacja o oświadczeniu if z inicjatorem w N4606 [stmt.if] p3 wyraźnie pozwala na użycie if constexpr.

Oto co N4606 [stmt.if] P3 mówi:

Instrukcja if formularza

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

jest równoważna

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

i jeśli zestawienie formularz

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

jest równoważna

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

wyjątkiem, że nazwy deklarowane w oświadczeniu startowe znajdują się w tym samym regionie deklaratywnej jak te deklarowane w stanie.

+0

Dobra odpowiedź, ale link do N4606 jest zepsuty – Alejandro

Powiązane problemy