Я хотел бы определить внутри класса константу, значение которой является максимально возможным int. Что-то вроде этого:
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
Это объявление не может скомпилироваться со следующим сообщением:
numeric.cpp: 8: ошибка: 'std:: numeric_limits:: max()' не может появляться в константном выражении numeric.cpp: 8: ошибка: вызов функции не может появляться в константном выражении
Я понимаю, почему это не работает, но две вещи выглядят странно для меня:
-
Мне кажется естественным решение использовать значение в постоянных выражениях. Почему разработчики языка решили сделать функцию max() таким образом, чтобы не разрешать это использование?
-
В статье 18.2.1 указано, что
Для всех членов, объявленных static const в шаблоне numeric_limits, специализации должны определять эти значения таким образом, чтобы они использовались как интегральные константные выражения.
Не означает ли это, что я должен использовать его в своем сценарии и не противоречит ли это сообщению об ошибке?
Спасибо.