#include <cstddef>
#include <string>
#include <type_traits>
#include <iostream>
namespace a {
constexpr int operator""_x(const char *str, std::size_t size) {
return size;
}
}
constexpr int f(const char* str)
{
return a::operator""_x(str, 3);
// std::char_traits::length is constexpr since C++17
}
int main()
{
const char *str = "333";
using str_char_type = std::remove_const_t<std::remove_pointer_t<decltype(str)>>;
static_assert(std::is_same<
char,
str_char_type
>::value, "err");
std::cout << f(str);
return 0;
}
I2luY2x1ZGUgPGNzdGRkZWY+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKbmFtZXNwYWNlIGEgewoJY29uc3RleHByIGludCBvcGVyYXRvciIiX3goY29uc3QgY2hhciAqc3RyLCBzdGQ6OnNpemVfdCBzaXplKSB7CiAgICAJcmV0dXJuIHNpemU7Cgl9Cn0KCmNvbnN0ZXhwciBpbnQgZihjb25zdCBjaGFyKiBzdHIpCnsKCXJldHVybiBhOjpvcGVyYXRvciIiX3goc3RyLCAzKTsKCS8vIHN0ZDo6Y2hhcl90cmFpdHM6Omxlbmd0aCBpcyBjb25zdGV4cHIgc2luY2UgQysrMTcKfQoKaW50IG1haW4oKQp7Cgljb25zdCBjaGFyICpzdHIgPSAiMzMzIjsKCXVzaW5nIHN0cl9jaGFyX3R5cGUgPSBzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3BvaW50ZXJfdDxkZWNsdHlwZShzdHIpPj47CgoJc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8CgkJY2hhciwKCQlzdHJfY2hhcl90eXBlCgk+Ojp2YWx1ZSwgImVyciIpOwoKCXN0ZDo6Y291dCA8PCBmKHN0cik7CgoJcmV0dXJuIDA7Cn0K