Basi c Идея заключается в следующем: у меня есть некоторая функция constexpr
, и я хочу использовать throw
для сигнализации об ошибке и отложенной компиляции, чтобы избежать этой ошибки в нормальном потоке:
template <size_t N>
auto constexpr find_elt(const std::array<int, N>& a, int k) {
for (size_t i = 0; i < N; ++i)
if (k == a[i])
return i;
throw "not found";
}
И затем:
constexpr int result = find_elt(arr, 4);
Обычно, если в массиве существует 4, я получу его индекс во время компиляции.
Если нет, я перейду к throw
, чтобы указать поиск ошибочен во время компиляции, и компилятор выдаст довольно большую ошибку.
Но я заметил странное поведение:
Под последним лязгом все работает
При последней версии g cc все терпит неудачу
Законна ли эта идея? Является ли этот код правильным для того, чего я хочу достичь? Какой компилятор говорит мне правду здесь?
Если нет, как правильно это сделать?
Любые ссылки на стандарт C ++ приветствуются. Я прочитал главы, связанные с constexpr, но сомневаюсь.