HomePhabricator

[flang] Remove default argument from function template specialization. NFC.

Authored by Meinersbur on Tue, Nov 16, 9:14 PM.

Description

[flang] Remove default argument from function template specialization. NFC.

Patch D113697 added default function arguments to template specializations of ConvertToBinary.

According to https://en.cppreference.com/w/cpp/language/template_specialization this not allowed:

Default function arguments cannot be specified in explicit specializations of function templates, member function templates, and member functions of class templates when the class is implicitly instantiated.

It happens to compile with gcc, clang and msvc 14.30 (Visual Studio 2022), but not msvc 14.29 (Visual Studio 2020). Even for the compilers that syntactically accept it, the default argument will never be used (only the default argument of the template declaration). From https://en.cppreference.com/w/cpp/language/function_template

Note that only non-template and primary template overloads participate in overload resolution.

That is, the explicit function template specialization is not added to the overload candidate set. Only after all the parameter types are known, are the explicit specializations chosen, at which point the default function argument is ignored.

Also see D85657.

Reviewed By: klausler

Differential Revision: https://reviews.llvm.org/D114032

Details