Namespaces
Variants

std::source_location::current

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support du langage
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (déprécié en C++20)
 
 
static consteval source_location current() noexcept;
(depuis C++20)

Construit un nouvel objet source_location correspondant à l'emplacement du site d'appel.

Valeur de retour

Si current() est invoqué directement (via un appel de fonction qui nomme current() ), il retourne un objet source_location avec des valeurs définies par l'implémentation représentant l'emplacement de l'appel. Les valeurs doivent être affectées par la #line directive du préprocesseur de la même manière que les macros prédéfinies __LINE__ et __FILE__ .

Si current() est utilisé dans un initialiseur de membre par défaut , la valeur de retour correspond à l'emplacement de la définition du constructeur ou de l' initialisation agrégée qui initialise le membre de données.

Si current() est utilisé dans un argument par défaut, la valeur de retour correspond à l'emplacement de l'appel à current() au site d'appel.

Si current() est invoqué de toute autre manière, la valeur de retour n'est pas spécifiée.

Notes

std::source_location::current nécessite généralement une implémentation intégrée au compilateur.

Exemple

#include <print>
#include <source_location>

struct src_rec
{
    std::source_location srcl = std::source_location::current();
    int dummy{};

    src_rec(std::source_location loc = std::source_location::current()) :
        srcl(loc)    // values of member refer to the location of the calling function
    {}
    src_rec(int i) : // values of member refer to this location
        dummy(i)
    {}
    src_rec(double)  // values of member refer to this location
    {}
};

std::source_location src_clone(std::source_location a = std::source_location::current())
{
    return a;
}

std::source_location src_make()
{
    return std::source_location::current();
}

int main()
{
    const auto r0 = src_rec();
    const auto r1 = src_rec(0);
    const auto r2 = src_rec(0.0);
    const auto s0 = std::source_location::current();
    const auto s1 = src_clone(s0);
    const auto s2 = src_clone();
    const auto s3 = src_make();

    std::println("#{1} {0} {2}", "r0", r0.srcl.line(), r0.srcl.function_name());
    std::println("#{1} {0} {2}", "r1", r1.srcl.line(), r1.srcl.function_name());
    std::println("#{1} {0} {2}", "r2", r2.srcl.line(), r2.srcl.function_name());
    std::println("#{1} {0} {2}", "s0", s0.line(), s0.function_name());
    std::println("#{1} {0} {2}", "s1", s1.line(), s1.function_name());
    std::println("#{1} {0} {2}", "s2", s2.line(), s2.function_name());
    std::println("#{1} {0} {2}", "s3", s3.line(), s3.function_name());
}

Sortie possible :

#31 r0 int main()
#13 r1 src_rec::src_rec(int)
#16 r2 src_rec::src_rec(double)
#34 s0 int main()
#34 s1 int main()
#36 s2 int main()
#26 s3 std::source_location src_make()

Voir aussi

construit un nouveau source_location avec des valeurs définies par l'implémentation
(fonction membre publique)
[static]
obtient la trace de pile actuelle ou sa partie spécifiée
(fonction membre publique statique de std::basic_stacktrace<Allocator> )