在模板参数中,"typename =" 是什么意思?

49
我在《Effective Modern C++》的第189页看到了这个表达式:
    template<typename T,
             typename = typename std::enable_if<condition>::type>
    explicit Person(T&& n);

我在想,“typename =”这部分是什么意思。它看起来像是模板参数的默认值。但是,在默认参数中,不需要像“typename some_name = ...”一样有一个名称吗?第二个模板参数没有名称,并且我没有看到第二个模板参数在这种情况下被使用。
附言:当我在谷歌(或任何其他搜索引擎)上搜索答案时,等号总是被忽略,这使得找到答案几乎不可能...
1个回答

40

这是一个没有名称和默认值的可选模板参数。
它用于应用 enable_if 条件;如果条件未满足,则会创建编译器错误。

您可以对普通方法参数使用完全相同的语法。


6
这个短语的意思是:如果条件未满足,它会引发编译错误。这是否意味着触发了 SFINAE(“Substitution Failure Is Not An Error”),并且构造函数没有定义?(我对 SFINAE 还不太熟悉。) - kevinarpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接