Let’s go over the conditions as they appear:
If const T
isn’t const (const
doesn’t really apply to function types since functions aren’t objects), and T
isn’t a reference (const
doesn’t apply to references either for the same reason), it’s a function type. int
(or any other non-function-non-reference type) wouldn’t fit in because is_const<const int>::value
is true
.
According to C++17 Standard §11.3.5 Functions / section 7: (Emphasis mine)
The effect of a cv-qualifier-seq in a function declarator is not the
same as adding cv-qualification on top of the function type. In the
latter case, the cv-qualifiers are ignored. [ Note: A function type
that has a cv-qualifier-seq is not a cv-qualified type; there are no
cv-qualified function types. — end note ] […]