Я хочу иметь вектор целых чисел и некоторый код, который обрабатывает этот вектор наиболее общим способом (во время компиляции) w.r.t. тип векторного элемента. E.g.:
std::vector<uint16_t> X;
...
X.push_back(rand() % std::numeric_limits<X::value_type>::max());
Но компилятор говорит:
the value of X is not usable in a constant expression
Почему нельзя использовать X::value_type
в таком контексте? Я имею в виду, что тип элемента X
не может измениться, если он объявлен с конкретным типом элемента, и это можно сделать из синтаксиса только этого фрагмента кода.
И какой должен быть подход, если я изменю объявленный тип элемента X
(другое целое число), но не хочу изменять строку push_back
из-за этого изменения? Я предполагаю любой современный стандарт C ++.