[all-commits] [llvm/llvm-project] d2124b: [flang] Remove default argument from function temp...

Michael Kruse via All-commits all-commits at lists.llvm.org
Tue Nov 16 22:06:38 PST 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: d2124bfccf5982f5fa0f9b2c2253fc0bb65beb4c
      https://github.com/llvm/llvm-project/commit/d2124bfccf5982f5fa0f9b2c2253fc0bb65beb4c
  Author: Michael Kruse <llvm-project at meinersbur.de>
  Date:   2021-11-17 (Wed, 17 Nov 2021)

  Changed paths:
    M flang/include/flang/Decimal/decimal.h

  Log Message:
  -----------
  [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




More information about the All-commits mailing list