Desmond Gold
Desmond Gold

Reputation: 2095

How to get a source location from the function as argument without using static member function `current`?

I want to my function get_source to return a std::source_location type by taking a another function as an argument.

For example, I have a function named helloMessage and sumOf with the following argument types and return type:

void helloMessage(const char* message);
int sumOf(int num1, int num2); 

And supposed I have a function that will get a source location from the function object and then return its value:

template <typename function_t>
std::source_location get_source(function_t func);

Input:

auto info_1 = get_source(helloMessage);
auto info_2 = get_source(sumOf); 

std::cout 
<< "info_1: " << info_1.function_name() << '\n'
<< "info_2: " << info_2.function_name() << '\n';

This is my expected output:

void helloMessage(const char*)
int sumOf(int, int)

How can I achieve this?

Upvotes: 2

Views: 666

Answers (1)

Nicol Bolas
Nicol Bolas

Reputation: 474276

source_location::current is always the ultimate source of any source_location object. source_location is serious about being the location in the source of the code that created that object.

So there is no way to turn a function into the location in the source that it came from. Not unless that function object has stored the source location of that function somewhere, which would be pretty difficult.

Upvotes: 1

Related Questions