D
Size: a a a
AT
LA
if conxtexpr
выбирает только одну ветвь в компильтайме и остальные выбрасываются, соответственно возвращаемый тип известенD
return
D
if conxtexpr
выбирает только одну ветвь в компильтайме и остальные выбрасываются, соответственно возвращаемый тип известенif constexpr
, если в if constexpr
есть однозначный return
?LA
if constexpr
, если в if constexpr
есть однозначный return
?D
if constexpr
однозначно по всем путям есть return
Почему ему надо смотреть куда-то ещё, кроме как эту самую ветку?if constexpr (1)Вот почему нельзя посмотреть просто на
if (1)
return 1;
else
return 0;
return std::string{};
if constexpr
, увидеть что из него мы никуда не выходим и просто отбросить другие части функции?LA
if constexpr
однозначно по всем путям есть return
Почему ему надо смотреть куда-то ещё, кроме как эту самую ветку?if constexpr (1)Вот почему нельзя посмотреть просто на
if (1)
return 1;
else
return 0;
return std::string{};
if constexpr
, увидеть что из него мы никуда не выходим и просто отбросить другие части функции?if constexpr
просто выбор нужного блока инструкций на этапе компиляции, после чего у нас остаётся обычная функция. Там ведь не обязан быть return-statement. Вероятно, так сделать можно было бы, но не сделано, поэтому вопрос именно к реализации. Ну или стандарту. Можешь написать пропозалNK
if constexpr
однозначно по всем путям есть return
Почему ему надо смотреть куда-то ещё, кроме как эту самую ветку?if constexpr (1)Вот почему нельзя посмотреть просто на
if (1)
return 1;
else
return 0;
return std::string{};
if constexpr
, увидеть что из него мы никуда не выходим и просто отбросить другие части функции?decltype(auto) foo() {
return 1;
return "kek";
}
int main() { foo(); }
тоже падает с ошибкой компиляции (с такой же как и предыдущий)D
decltype(auto) foo() {
return 1;
return "kek";
}
int main() { foo(); }
тоже падает с ошибкой компиляции (с такой же как и предыдущий)AF
AT
return
AF
D
AF
AF
AF