On 11/05/21 21:00 +0100, Jonathan Wakely wrote:
Alternatively, would it be even simpler to just define a partial specialization of ctype?template<typename _CharT, typename _Traits, typename _Alloc> class ctype<basic_string<_CharT, _Traits, _Alloc> > { #if __cplusplus >= 201103L static_assert(something dependent, "std::basic_string used as a character type"); #endif private: ctype(); ~ctype(); }; This will work in C++98 too.
Or just leave it undefined, as libc++ seems to do according to your comment in PR 89728: error: implicit instantiation of undefined template 'std::__1::ctype<std::__1::basic_string<char> >' Was your aim to have a static_assert that gives a more descriptive error? We could leave it undefined in C++98 and have the static assert for C++11 and up.
