Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is `int(int) const` a valid function type in C++23?

Below is excerpted from cppref:

template<class...>
class move_only_function; // not defined

template<class R, class... Args>
class move_only_function<R(Args...) const>;

I also tried the following code:

// ok
std::function<int(int)> fn; 

// error: implicit instantiation of undefined template
// 'std::function<void () const>'
std::function<int(int) const> fn; 

Is int(int) const a valid function type in C++23?

like image 401
xmllmx Avatar asked Dec 30 '25 21:12

xmllmx


1 Answers

Is int(int) const a valid function type in C++23?

Yes, int(int) const has always been(even before c++23) a function type. Even auto(int)const->int is a function type.

This can be seen from dcl.fct:

  1. In a declaration T D where D has the form
 D1 ( parameter-declaration-clause ) cv-qualifier-seqopt
   ref-qualifieropt noexcept-specifieropt attribute-specifier-seqopt
  1. In a declaration T D where D has the form
 D1 ( parameter-declaration-clause ) cv-qualifier-seqopt
   ref-qualifieropt noexcept-specifieropt attribute-specifier-seqopt trailing-return-type  
  1. A type of either form is a function type.

(emphasis mine)

This means that both are auto(int)const->int as well as int(int)const are function type.

using type = int(int) const;             //this is a function type
using anothertype = auto(int)const->int; //this is also a function-type
like image 95
Anoop Rana Avatar answered Jan 02 '26 12:01

Anoop Rana