std::meta::is_accessible
Depuis fr.cppreference.net
| Défini dans l'en-tête <meta>
|
||
consteval bool is_accessible( std::meta::info r, std::meta::access_context ctx );
|
(depuis C++26) | |
Détermine si le membre ou la classe de base représenté par r est accessible dans le contexte de ctx.
Si r ne représente pas un membre de classe ou une relation de classe de base directe, retourne true. Sinon, soit :
PARENT_CLSsoit la classe qui contient la déclaration de ce querreprésente ou la classe dérivée dans la relation de base directe ;DESIGNATING_CLSsoitctx.designating_class()si ce n'est pas la réflexion nulle, ouPARENT_CLSsinon.
Le résultat est déterminé comme suit :
- Si
DESIGNATING_CLSn'est pas identique à ou dérivé dePARENT_CLS, alors retournefalse. - Sinon, si
ctx.scope()est la réflexion nulle, alors retournetrue. - Sinon, si
rreprésente une relation de classe de base directe où la classe de base estB, retournetruesi la classe de baseBdeDESIGNATING_CLSest accessible dansctx.scope(); sinon retournefalse. - Sinon,
rreprésente un membre M. retournetruesi M en tant que membre deDESIGNATING_CLSserait accessible dansctx.scope()si l'effet de toute déclaration using était ignoré ; sinon retournefalse.
Cette fonction traite un champ de bits non nommé comme un membre de données non statique avec le même accès.
Paramètres
| r | - | une valeur de réflexion |
| ctx | - | un contexte d'accès |
Valeur de retour
true si ce que r représente est accessible dans le contexte ctx, sinon false
Exceptions
Lève std::meta::exception si r représente un membre d'une classe en cours de définition.
Exemple
Exécuter ce code
#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() {}
Voir aussi
(C++26) |
représente un contexte pour la vérification d'accès (classe) |