https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92187
Bug ID: 92187
Summary: [concepts] An abbreviated function template ignores
type constraint in some circumstances
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: kariya_mitsuru at hotmail dot com
Target Milestone: ---
The sample code below is compiled successfully by current trunk.
==========================
template <typename>
concept C = false;
C auto f(auto)
{
return 42;
}
int main()
{
return f(0);
}
==========================
cf. https://wandbox.org/permlink/BXPESMeiWSoUSmTn
According to C++ standard draft N4835 [dcl.type.auto.deduct] p.6,
> For a placeholder-type-specifier with a type-constraint, the
> immediately-declared
> constraint of the type-constraint for the type deduced for the placeholder
> shall
> be satisfied.
So I think that the code should be failed to compile.
Note that the codes below are failed to compile.
==========================
template <typename>
concept C = false;
// normal(non abbreviated) function template
template <typename T>
C auto f(T)
{
return 42;
}
int main()
{
return f(0);
}
==========================
cf. https://wandbox.org/permlink/j3HfbOv7PbOqSnhj
==========================
template <typename>
concept C = false;
// normal function
C auto f(int)
{
return 42;
}
int main()
{
return f(0);
}
==========================
cf. https://wandbox.org/permlink/blq6P4QgQdgEuPF9
==========================
template <typename>
concept C = false;
// trailing return type
auto f(auto) -> C auto
{
return 42;
}
int main()
{
return f(0);
}
==========================
cf. https://wandbox.org/permlink/JfV8QmbNnjZ4ranP