最終更新日時(UTC):
が更新

履歴 編集

function template
<meta>

std::meta::reflect_constant_string(C++26)

namespace std::meta {
  template <ranges::input_range R>
  consteval info reflect_constant_string(R&& r);
}

概要

文字のRangeからヌル終端文字配列のリフレクションを生成する。

define_static_string()const CharT*を返すため配列のサイズ情報が失われるが、この関数はサイズ情報を保持した配列のリフレクションを返す。そのため、サイズをテンプレートパラメータとして推論する必要がある型(FixedString<N>など)にスプライスで渡すことができる。

また、define_static_string()はこの関数を内部で使用して実装されている。

戻り値

rの要素をコピーしたヌル終端文字配列const CharT[sizeof...(V)+1]のテンプレートパラメータオブジェクトのリフレクションを返す。

#include <meta>
#include <algorithm>
#include <cstddef>

template <std::size_t N>
struct FixedString {
  char data[N] = {};
  constexpr FixedString(const char (&str)[N]) {
    std::ranges::copy(str, str + N, data);
  }
};

template <FixedString S>
struct Named {};

int main() {
  // define_static_stringはconst char*を返すためFixedStringのサイズを推論できない
  // using Err = Named<std::define_static_string("hello")>;  // エラー

  // reflect_constant_stringはサイズ付き配列のリフレクションを返すため推論できる
  // (テンプレート引数で使うときはスプライスをカッコで囲む必要がある)
  using Ok = Named<([:std::meta::reflect_constant_string("hello"):])>;
}

出力

バージョン

言語

  • C++26

処理系

関連項目

参照