brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 9ca979d Raw
73 lines · c
1 2// NOTE: source_location.cpp must include this file after defining3// std::source_location.4namespace source_location_file {5 6constexpr const char *FILE = __FILE__;7constexpr const char *FILE_NAME = __FILE_NAME__;8 9constexpr SL global_info = SL::current();10constexpr const char *global_info_filename = __builtin_FILE_NAME();11 12constexpr SL test_function(SL v = SL::current()) {13  return v;14}15 16constexpr SL test_function_indirect() {17  return test_function();18}19 20constexpr const char *test_function_filename(21                      const char *file_name = __builtin_FILE_NAME()) {22  return file_name;23}24 25constexpr const char *test_function_filename_indirect() {26  return test_function_filename();27}28 29template <class T, class U = SL>30constexpr U test_function_template(T, U u = U::current()) {31  return u;32}33 34template <class T, class U = SL>35constexpr U test_function_template_indirect(T t) {36  return test_function_template(t);37}38 39template <class T, class U = const char *>40constexpr U test_function_filename_template(T, U u = __builtin_FILE_NAME()) {41  return u;42}43 44template <class T, class U = const char *>45constexpr U test_function_filename_template_indirect(T t) {46  return test_function_filename_template(t);47}48 49struct TestClass {50  SL info = SL::current();51  const char *info_file_name = __builtin_FILE_NAME();52  SL ctor_info;53  const char *ctor_info_file_name = nullptr;54  TestClass() = default;55  constexpr TestClass(int, SL cinfo = SL::current(),56                      const char *cfile_name = __builtin_FILE_NAME()) :57                      ctor_info(cinfo), ctor_info_file_name(cfile_name) {}58  template <class T, class U = SL>59  constexpr TestClass(int, T, U u = U::current(),60                      const char *cfile_name = __builtin_FILE_NAME()) :61                      ctor_info(u), ctor_info_file_name(cfile_name) {}62};63 64template <class T = SL>65struct AggrClass {66  int x;67  T info;68  T init_info = T::current();69  const char *init_info_file_name = __builtin_FILE_NAME();70};71 72} // namespace source_location_file73