This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 120c. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2026-09-13


3231. Default template argument for the prototype parameter of a concept

Section: 13.7.9  [temp.concept]     Status: open     Submitter: Corentin Jabot     Date: 2026-07-20     Liaison: EWG

(From submission #951.)

It is design-unclear whether the prototype parameter of a concept definition is allowed to have a default argument. That default argument would be used only in situations where a concept-id appears as a boolean expression. Example:

   template <typename T = int>
   concept C2 = true;
   static_assert(C2<>);

   template<C2 U>      // U is not required to be int
   void f(U);

Suggested resolution of submitter:

Change in 13.7.9 [temp.concept] as follows:

The first declared template parameter of a concept definition is its prototype parameter. It shall not have a default argument (13.2 [temp.param]). A type concept is a concept whose prototype parameter is a type template parameter.

Additional notes (CWG 2026-09-01)

CWG considers this a language design question and requests EWG input via paper issue #2875.