Что означают слова & quot; неопределенные & quot; значит в пуле пункт 5,19 / 2,3 в N4140?

От N4140 §5.19 / 2.3 (выделено мной)

— вызов не определено функция constexpr или
не определено конструктор constexpr;

Из §7.1.5 / 2 функции и конструкторы constexpr неявно встроены, то есть, если функция constexpr не определена в TU, код просто не будет компилироваться.

4

Решение

Эта пуля была добавлена дефект 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 к формулировке в настоящее время в проекте стандарта.

7

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector