Namespaces
Variants

std::source_location:: current

From cppreference.net
Utilities library
static consteval source_location current ( ) noexcept ;
(depuis C++20)

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

Table des matières

Paramètres

(aucun)

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 <source_location>
#include <iostream>
struct src_rec {
    std::source_location srcl = std::source_location::current();
    int dummy = 0;
    src_rec(std::source_location loc = std::source_location::current()) :
        srcl(loc)    // les valeurs du membre font référence à l'emplacement de la fonction appelante
    {}
    src_rec(int i) : // les valeurs du membre font référence à cet emplacement
        dummy(i)
    {}
    src_rec(double)  // les valeurs du membre font référence à cet emplacement
    {}
};
std::source_location src_clone(std::source_location a = std::source_location::current())
{
    return a;
}
std::source_location src_make()
{
    std::source_location b = std::source_location::current();
    return b;
}
int main()
{
    src_rec srec0;
    src_rec srec1(0);
    src_rec srec2(0.0);
    auto s0 = std::source_location::current();
    auto s1 = src_clone(s0);
    auto s2 = src_clone();
    auto s3 = src_make();
    std::cout
        << srec0.srcl.line() << ' ' << srec0.srcl.function_name() << '\n'
        << srec1.srcl.line() << ' ' << srec1.srcl.function_name() << '\n'
        << srec2.srcl.line() << ' ' << srec2.srcl.function_name() << '\n'
        << s0.line() << ' ' << s0.function_name() << '\n'
        << s1.line() << ' ' << s1.function_name() << '\n'
        << s2.line() << ' ' << s2.function_name() << '\n'
        << s3.line() << ' ' << s3.function_name() << '\n';
}

Sortie possible :

31 int main()
12 src_rec::src_rec(int)
15 src_rec::src_rec(double)
34 int main()
34 int main()
36 int main()
25 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> )