std::experimental::source_location
, вероятно, будет добавлен в стандарт C ++ в какой-то момент.Мне интересно, возможно ли получить информацию о местоположении в области времени компиляции.По сути, я хочу функцию, которая возвращает разные типы при вызове из разных источников.Примерно так, хотя он не компилируется, потому что объект location
не constexpr
, так как это аргумент функции:
#include <experimental/source_location>
using namespace std::experimental;
constexpr auto line (const source_location& location = source_location::current())
{
return std::integral_constant<int, location.line()>{};
}
int main()
{
constexpr auto ll = line();
std::cout << ll.value << '\n';
}
Не компилируется, с сообщением о
expansion of [...] is not a constant expression
относительно линии return std::integral_constant<int, location.line()>{}
.Что хорошего в том, чтобы методы source_location
были constexpr
, если я не могу их использовать?