Автор Владимир Баклунов задал вопрос в разделе Другие языки и технологии
C++. Constexpr функции. Практическое использование. и получил лучший ответ
Ответ от Николай Веселуха[гуру]
В Си есть библиотека limits.h, а в С++ limits (без h). Разница заключается в том, что сишная определяет предельные для типов константы макросами, которые можно подставлять как константы, например в качестве размера массива:
int arr[SHRT_MAX]; // это везде работает!
А в С++ для целей определения предельных значений типа в limits объявлены шаблоны класса numeric_limits, где SHRT_MAX будет соответствовать вызов шаблонного метода:
short mx = std::numeric_limits::max();
Однако в С++11 существует один тонкий момент! Использовать метод для определения размера статического массива нельзя, так как его размер должен быть известен на этапе компиляции. В С++14 эту проблему решили с помощью ключевого слова constexpr, которое говорит компилятору о том, что возвращаемое методом значение неизменно и он (компилятор) подставит в место вызова константу равную возвращаемому значению.
Ну и конечно же требуется компилятор, который поддерживает эту фичу. Майкрософт заявляет поддержку в Visual C++2015.
Николай Веселуха
Высший разум
(201614)
вот хорошая статья
в общем идея поста - есть выражения (constant expresions) в том числе функций, которые компилятор может знать или почитать во время компиляции, constexpr это спецификатор который говорит делать это явно;
вижуал поддерживает только начиная с VS 2015