Is this program ill-formed despite SFINAE?

后端 未结 2 1042
情话喂你
情话喂你 2021-01-21 13:08
template  void f() {
    return 0;  // returning value from function returning `void`
}

int main()
{
    // Not instantiating or calling any f

        
2条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-21 13:31

    The program is ill-formed as per 14.6/8:

    If no valid specialization can be generated for a template definition, and that template is not instantiated, the template definition is ill-formed, no diagnostic required.

    That is whether you instantiate the template or not, the template definition is ill-formed as there is no possible instantiation that will succeed.

    Note that this is completely unrelated to SFINAE: Substitution Failure is not an Error is part of the substitution process, and never takes into account the contents of the template.

提交回复
热议问题