int *p = -m1;
нуждается в реализации перегрузки унарного оператора T operator-(const T &a);
, где T
эквивалентно DinMass
.T operator-(const T &a, const T2 &b);
.bool foo = !bar;
? template<typename int>
void function3(int [], int, int(*)(int));
Тут
"foo"
и"hello"
потенциально идут в бинарник потому что они ODR-used.Чтобы constexpr-функция посчитала хеш, ей нужен адрес строки. Чтобы у литерала появился адрес, ему надо задать размещение в памяти бинарника. Т.к. у литерала появилось размещение, constexpr-функция утрачивает контекст времени компиляции и тоже получает свое размещение в бинарнике. В результате мы получаем исполнение на стадии исполнения перед
main
, а не во время компиляции.Если ты до сих пор пользуешься лишь стандартом C++11, то выход будет таким.
Если твой стандарт - C++14, то для восстановления контекста времени компиляции можно использовать шаблон константы.
Если ты пользуешься C++17, то выходом будет шаблон встраиваемой константы - самый лучший способ объяснить транслятору свои намерения.
Если ты задал
kdata
както пользоваться тебе им можно только так
Кстати,
encoder
тоже стоит исправить наВ этом случае можно будет не указывать размерность строки, а то так очень легко ошибиться.