2012-09-02 14 views
5

Czy standard C++ 11 określa, że ​​numeric_limits<T>::min i max muszą być wyrażeniami stałymi, które mogą być używane w szablonach lub static_assert?Czy numeric_limits min/max constexpr?

Bardziej ogólnie, jak znaleźć listę funkcji, które są wyrażeniem stałym zgodnie ze standardem?

+0

Główna motywacja nowego słowa kluczowego "constexpr" polegała na tym, aby wyrażenia stały się wyrażeniami numeric_limits. –

Odpowiedz

9

Rzeczywiście średnia (lub mój najnowszy projekt roboczy) zawiera listę wszystkich członków std::numeric_limits w rozdziale 18.3.2.3 [numeric.limits] jak constexpr (nie zrobi nic dobrego rzeczywiście zacytować te definicje tutaj), na ogólna wersja szablonowa oraz wszystkie specjalizacje wbudowane (18.3.2.7 [numeric.special]). Tak więc, mają zagwarantowane stałe wyrażenia (dla zgodnych implementacji, które również faktycznie obsługują constexpr, oczywiście).

Jeśli chodzi o twoje drugie, bardziej ogólne pytanie, nie mogę ci w tym nic pomóc poza wybraniem samego standardu C++, którego najnowsza wersja, która tak naprawdę nie różni się od rzeczywistego standardu, jest dostępna za darmo. Lub możesz spojrzeć na wygodniejsze, ale mniej wiążące cppreference.com.

+2

Dla osób, których to dotyczy, Visual Studio 2013 CTP w listopadzie 2013 r. * Nie * ma constexpr numeric_limits, przynajmniej nie dla min() i max(). –

+0

@EmilyL. Cóż, w ogóle nie ma "constexpr", prawda? –

+0

Dzieje się tak, częściowo ... to jest "jeszcze nie zaimplementowane" dla funkcji członka. http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/0638.Updated-Conformance-Map.png –

Powiązane problemy