У вас неправильный синтаксис.
ограничения типа , такие как концепция HasSize
здесь, принадлежат непосредственно перед указателем типа заполнителя , то есть до auto
или decltype(auto)
:
void f6(const HasSize auto& arg) {}
См. [dcl.spe c .auto] черновика C ++ 20.
cv-qualifier s, такой как const
, отделен от спецификатора типа заполнителя s, см. [decl.type] / 1 .
Как упомянуто @super в комментарии к вопросу decltype(auto)
недопустимо в параметре функции. Так что это похоже на ошибку Clang, чтобы принять ее, см. [dcl.spe c .auto] / 2 , которая допускает только случай auto для placeholder- спецификатор типа в параметре функции.