Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

user defined string literal, is string null terminated?

For user defined string literals, is the given string guaranteed null terminated if I use the following form of definition? I know that the size given with second parameter count without any termination if there is any.

void operator"" _x( const char* n, size_t s)
{
    std::cout << "String: " << s << " Len: " << s << std::endl;
}

If I use this version of definition I see no null termination character!

template <class T, T... Chrs>
void operator""_s() 
{
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}
like image 637
Klaus Avatar asked Jun 27 '17 12:06

Klaus


1 Answers

user defined string literal, is string null terminated?

void operator"" _x( const char* n, size_t s)

Yes. String literals are null terminated and n points to such string literal.


If I use this version of definition I see no null termination character!

template <class T, T... Chrs>
void operator""_s()

The standard does not allow string literal templates. There is the document N3599 which proposes its addition to the standard, and it was intended for C++14 but there was no consensus and it hasn't become part of the standard yet. GCC and Clang at least appear to have already implemented it as a language extension.

Indeed, the literal operator template does not receive the null character as one of its arguments.

Proposal N3599:

the remaining arguments are the code units in the string literal (excluding its terminating null character).

like image 135
eerorika Avatar answered Sep 30 '22 01:09

eerorika