省略抛出的非空函数模板的 return 语句是否有效

Is it valid to omit the return statement of a non-void function template that throw

我正在使用列出的资源 here 学习 C++。特别是,我阅读了有关异常的信息,想知道省略如下所示抛出的非空 function/function 模板的 return 语句是否有效:

示例 1

#include <iostream>
//this function template does not have a return statement
template<typename T>
T func()
{
    int x = 4;
    std::cout<<"x: "<<x<<std::endl;
    throw;
}

int main()
{
  func<double>();
}

示例 2

#include <iostream>
//this function does not have a return statement
int func()
{
    int x = 4;
    std::cout<<"x: "<<x<<std::endl;
    throw;
}

int main()
{
  func();
}

我的问题是示例 1 和示例 2 有效吗?或者我们有 UB/ill-formed.

are example 1 and example 2 valid?

是的。

Or we have UB/ill-formed.

没有

Is it valid to omit the return statement of a non-void function/function template that throw

是的。 non-void returning 函数必须抛出或 return 一个值。它不能同时进行。

So is int func(){ int x = 4; throw; return x;} valid

有效。但它从来没有 return 值。 throw 之后的所有内容都是死代码。