От N4140 §5.19 / 2.3 (выделено мной)
— вызов не определено функция constexpr или
не определено конструктор constexpr;
Из §7.1.5 / 2 функции и конструкторы constexpr неявно встроены, то есть, если функция constexpr не определена в TU, код просто не будет компилироваться.
Эта пуля была добавлена дефект 699 и это требует, чтобы функция или конструктор constexpr были определены перед использованием. В отчете о дефектах добавлен следующий пример 7.1.5
продемонстрировать правило:
constexpr int square(int x); //OK, declaration
constexpr struct pixel { // error: pixel is a type
int x;
int y;
constexpr pixel(int); // OK, declaration
};
constexpr pixel::pixel(int a)
: x(square(a)), y(square(a)) { } //OK, definition
constexpr pixel small(2); // error: square not defined, so small(2)
// not constant (5.19 [expr.const]), so constexpr not satisfied
constexpr int square(int x) { // OK, definition
return x * x;
}
constexpr pixel large(4); // OK, square defined
Обратите внимание, что формулировка из этого отчета изменилась с отчет о дефекте 1365 к формулировке в настоящее время в проекте стандарта.