C++ Logo

std-proposals

Advanced search

[std-proposals] Explicitly specifying default arguments

From: Andrey Semashev <andrey.semashev_at_[hidden]>
Date: Wed, 1 Feb 2023 15:56:44 +0300
Hi,

Would it be possible to be able to explicitly specify default arguments
for template specializations and function calls?

  void foo(int x, int y = 10, int z = 20);

  foo(1, default, 3); // == foo(1, 10, 3);


  // Use default ordering function
  typedef std::set< int, default, my_alloc > my_set;

  // Use default compare and hash functions
  typedef std::unordered_set< int, default, default, my_alloc > my_uset;


  template<
    typename T,
    typename = whatever,
    bool = is_special< T >::value
>
  struct trait {};

  // Specialization: trait< T, whatever, true >
  template< typename T >
  struct trait< T, default, true > {};

This syntax is currently invalid, so the extension would be pretty
harmless. This would allow to avoid code duplication, where the user of
the function or template, or the one who specializes the template, has
to duplicate the default argument when he only needs to specify the
arguments after that.

Received on 2023-02-01 12:56:57