Просто хотел Вас предупредить: С++14 не будет обратно совместим с C++11 в одном аспекте
constexpr
функций.
В С++11, если Вы определите
constexpr
функцию-член, то она неявно получит спецификатор
const
:
// C++11
struct NonNegative
{
int i;
constexpr int const& get() /*const*/ { return i; }
int& get() { return i; }
};
Первое объявление функции
get
получит спецификатор
const
, даже если мы не укажем это явно. Следовательно, эти две функции являются перегруженными:
const
и не-
const
версии.
В С++14 это будет уже не так: оба объявления будут определять одиннаковую, не-
const
версию функции-члена с различающимися возвращаемыми значениями — это приведет к ошибке компиляции. Если Вы уже начали использовать
constexpr
функции и надеетесь на неявный спецификатор
const
, то я советую Вам начать добавлять его явно, чтобы Ваш код продолжал компилироваться, если Вы решите перейти на компиляторы С++14.
Читать дальше →
Comments
Show all comments