namespace std::meta {
consteval bool has_c_language_linkage(info r);
}
概要
C言語リンケージを持つかを判定する。
戻り値
rが、C言語リンケージ(extern "C")を持つ変数・関数・関数型を表す場合にtrueを返す。そうでなければfalseを返す。
例
#include <meta>
extern "C" void c_func();
void cpp_func();
extern "C" int c_var;
int main() {
static_assert(std::meta::has_c_language_linkage(^^c_func));
static_assert(!std::meta::has_c_language_linkage(^^cpp_func));
static_assert(std::meta::has_c_language_linkage(^^c_var));
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??
参照
- P2996R13 Reflection for C++26
- LWG Issue 4433. Incorrect query for C language linkage
- C++26で、言語リンケージは名前ではなく変数・関数・関数型の性質であることを踏まえ、この関数が変数・関数・関数型を対象とすることが明確化された