namespace std::meta {
consteval bool has_external_linkage(info r);
}
概要
外部リンケージを持つかを判定する。
戻り値
rが、その名前が外部リンケージを持つ変数・関数・型・テンプレート・名前空間を表す場合にtrueを返す。そうでなければfalseを返す。
例
#include <meta>
int global_var; // 外部リンケージ
static int internal_var; // 内部リンケージ
namespace { int anon_var; } // 内部リンケージ
int main() {
static_assert(std::meta::has_external_linkage(^^global_var));
static_assert(!std::meta::has_external_linkage(^^internal_var));
static_assert(!std::meta::has_external_linkage(^^anon_var));
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ✅
- Visual C++: ??
参照
- P2996R13 Reflection for C++26
- LWG Issue 4433. Incorrect query for C language linkage
- C++26で、判定対象が「C言語外部リンケージ」ではなく「外部リンケージ」であることが明確化された(
has_c_language_linkageの修正に伴うドライブバイ修正)
- C++26で、判定対象が「C言語外部リンケージ」ではなく「外部リンケージ」であることが明確化された(