https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101463
Bug ID: 101463 Summary: Using a constexpr variable template specialization as default argument for non-type template parameter of reference type leads gcc to reject function call Product: gcc Version: 11.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: michael.kenzel at gmail dot com Target Milestone: --- The following code will reproduce the issue: extern const int a; template <typename T> constexpr const int& blub = a; template <typename T, const int& b = blub<T>> void f() {} int main() { f<void>(); // error: no matching function for call to 'f<void>()' f<void, blub<void>>(); // ok } Note: gcc will accept the function call when the exact same template argument is explicitly specified instead. godbolt link: https://godbolt.org/z/jd3EGWEfo