Я ожидал, что компилятор разрешит недопустимые операторы или сообщения об ошибках в недостижимом коде, включающем constexpr, если:
#include <type_traits>
#include <iostream>
struct ret_t;
struct only_declared_t;
auto test = [](auto a) {
if constexpr(std::is_invocable_r_v<ret_t, decltype(a), int>) {
return a(42);
} else {
return 42;
}
// I expect to never reach that statement, but the compiler complains
static_assert(false, "This code should never be reached.");
return only_declared{};
};
int main() {
std::cerr << "Result is " << test(10) << "\n";
}
Было бы полезно любое объяснение / обходной путь
static_assert
s почти где угодно, их не нужно запускать, чтобы вызвать ошибку - person 463035818_is_not_a_number   schedule 15.09.2020else
недоступен - person 463035818_is_not_a_number   schedule 15.09.2020if constexpr
не разрешает суп из токенов, у него все еще есть ограничения - person StoryTeller - Unslander Monica   schedule 15.09.2020