Is there MSVC equivalent for __builtin__FUNCTION()?
According to this answer we can find the name of the calling function using __builtin__FUNCTION()
in GCC. Is there MSVC equivalent for this?
std::source_location
will be the cross platform solution in the future allowing you to do:
void log(const std::string& message, const std::experimental::source_location& location = std::experimental::source_location::current())
{
std::cout << location.function_name() << ": " << message << "\n";
}
int main()
{
log("test");
}
Until this is available the best solution I am aware of is to use macros to capture the value of __FUNCTION__
and pass it to your function. For example something like this:
void log(const std::string& message, const std::string& function)
{
}
#define LOG(message) log(message, __FUNCTION__)
int main()
{
LOG("test");
}
Yes, such intrinsics (__builtin_FILE()
, __builtin_FUNCTION()
, __builtin_LINE()
, __builtin_COLUMN()
) were added for VS 2019 16.6 Preview 2 (according to this link) to support c++20 std::source_location
.