constexpr static метод

138
02 декабря 2019, 23:20

Изучаю C++, полез в constexpr, но почти сразу наткнулся на странности. У меня есть класс Date, который хранит дату, у него есть метод static bool isLeapYear(unsigned short), к которому я попробовал добавить constexpr, таким образом:

Объявление

class Date{
    // ...
    constexpr static bool isLeapYear(unsigned short);
    // ...
};

Определение

constexpr bool Date::isLeapYear(ushort year)
{
    return year % 4 == 0;
}

Попытка использования

constexpr bool p = Date::isLeapYear(2000);

Ругань компилятора

1>c:\...\main.cpp(13): error C2131: выражение не определяется константой
1>c:\...\main.cpp(13): note: сбой был вызван неопределенной функцией или функцией, не объявленной как "constexpr"
1>c:\...\main.cpp(13): note: см. использование "Date::isLeapYear"

При этом аналогичное использование точно такой же функции не члена класса успешно компилируется.

READ ALSO
c++ объект статической инициализации map<T1,T2>

c++ объект статической инициализации map<T1,T2>

Не получается правильно сконструировать класс для статической инициализации map<T1,T2>, ругается на синтаксис и просит точку с запятой там...

127
GTK+ программа не изменяет стиль

GTK+ программа не изменяет стиль

На Debian 98 c Gnome GTK+ программа не изменяет стиль

146
Ошибка Microsoft C++ exception: std::out_of_range at memory location [закрыт]

Ошибка Microsoft C++ exception: std::out_of_range at memory location [закрыт]

Выдает ошибку Microsoft C++ exception: std::out_of_range at memory location Как я поняла, то ошибка в последней функции replaceНо что именно не так, не вижу

264