,通过将模板参数声明为 auto, 编译器便可以自动推导非类型模板参数(第1行代码中的 N)的类型了,你甚至可以像示例代码中那样(第7和第8行)偏特化该模板(示例代码中为int类型进行了偏特化).第13...行代码的模板会依据原始模板(示例中的第一个模板)进行实例化,而第14行代码的实例化依据的则是偏特化模板版本(示例中的第二个模板)....即便在可变参数模板中,非类型模板参数也可以进行自动类型推导.
template
class VariadicTemplate
{
...
};
template
class TypedVariadicTemplate
{
...
};
示例代码中,模板 VariadicTemplate(第1行至第5行) 可以对任意数量的非类型模板参数进行自动类型推导...下面的示例中,第6行代码会产生一个编译警告,但在第12行代码中,由于 foo 函数返回的是引用类型(虽然引用类型本身是[[nodiscard]]属性),所以不会产生编译警告.
struct [[nodiscard