std::is_string_literal
ja.cppreference.net より
| ヘッダ <meta>
|
||
consteval bool is_string_literal( const char* p );
|
で定義 (1) | (C++26 以上) |
consteval bool is_string_literal( const wchar_t* p );
|
(2) | (C++26 以上) |
consteval bool is_string_literal( const char8_t* p );
|
(3) | (C++26 以上) |
consteval bool is_string_literal( const char16_t* p );
|
(4) | (C++26 以上) |
consteval bool is_string_literal( const char32_t* p );
|
(5) | (C++26 以上) |
p が 文字列リテラルオブジェクト の要素を指しているかどうかを判定します。
結果は次のように決定されます:
pが定数式で使用できないオブジェクトを指している場合、falseを返します。- そうでない場合、
pが文字列リテラルオブジェクトのサブオブジェクトを指している場合、trueを返します。 - そうでない場合、
falseを返します。
引数
| p | - | 文字ポインタ |
戻り値
truep が静的に文字列リテラル内を指すと確定した場合は false、そうでない場合は
。
例
#include <meta>
int main()
{
constexpr const char* p = "";
constexpr const char a[] = "";
static_assert(std::is_string_literal(p));
static_assert(!std::is_string_literal(a));
static_assert(std::is_string_literal(LR"(wcahr_t)"));
static_assert(std::is_string_literal(R"(\N{CAT})"));
}
このコードを実行
define_static_string |
(C++26) コンパイル時文字列を静的ストレージに昇格し、静的文字列の最初の文字へのポインタを返す |