std::meta::is_accessible
Определён в заголовке <meta> | ||
|---|---|---|
consteval bool is_accessible( std::meta::info r, std::meta::access_context ctx ); | (начиная с C++26) |
Определяет, является ли член или базовый класс, представленный r, доступным в контексте ctx.
Если r не представляет член класса или отношение прямого базового класса, возвращает true. В противном случае пусть:
-
PARENT_CLS— это класс, содержащий объявление того, что представляетr, или производный класс в отношении прямого базового класса; -
DESIGNATING_CLS— этоctx.designating_class(), если это не нулевое отражение, илиPARENT_CLSв противном случае.
Результат определяется следующим образом:
- Если
DESIGNATING_CLSне совпадает сPARENT_CLSи не является его производным, возвращаетfalse. - В противном случае, если
ctx.scope()является нулевым отражением, возвращаетtrue. - В противном случае, если
rпредставляет отношение прямого базового класса, где базовым классом являетсяB, возвращаетtrue, если базовый классBвDESIGNATING_CLSдоступен вctx.scope(); в противном случае возвращаетfalse. - В противном случае
rпредставляет член M. Возвращаетtrue, если M как членDESIGNATING_CLSбыл бы доступен вctx.scope(), если бы эффект любого объявления using игнорировался; в противном случае возвращаетfalse.
Эта функция рассматривает безымянное битовое поле как нестатический член данных с таким же уровнем доступа.
Параметры
| r | - | значение отражения |
| ctx | - | контекст доступа |
Возвращаемое значение
true, если то, что представляет r, доступно в контексте ctx; в противном случае false
Исключения
Выбрасывает std::meta::exception, если r представляет член класса, который в данный момент определяется.
Пример
#include <meta>
consteval std::meta::access_context fn()
{
return std::meta::access_context::current();
}
class C
{
[[maybe_unused]] int moo;
friend consteval std::meta::access_context fn();
public:
static constexpr auto r{^^moo};
};
static_assert(is_accessible(C::r, fn()) == true);
static_assert(is_accessible(C::r, std::meta::access_context::current()) == false);
static_assert(is_accessible(C::r, std::meta::access_context::unchecked()) == true);
int main() {}
См. также
|
(C++26) | контекст для проверки доступа (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/is_accessible