testing variants

main
Brett 2025-04-20 16:21:02 -04:00
parent f573aaf92f
commit cb16be1bae
3 changed files with 31 additions and 9 deletions

View File

@ -27,7 +27,7 @@ macro(compile_options target_name)
sanitizers(${target_name}) sanitizers(${target_name})
endmacro() endmacro()
project(blt-gp VERSION 0.5.16) project(blt-gp VERSION 0.5.17)
include(CTest) include(CTest)

@ -1 +1 @@
Subproject commit fb092422a82e503d314fc5c99eacb306c29386e8 Subproject commit e5a3c9d669900ea3976fc575840e499d1ecdac27

View File

@ -28,7 +28,7 @@
struct default_type struct default_type
{ {
std::string to_string() // NOLINT virtual std::string to_string() // NOLINT
{ {
return "Unimplemented"; return "Unimplemented";
} }
@ -36,7 +36,7 @@ struct default_type
struct type1 : default_type struct type1 : default_type
{ {
std::string to_string() // NOLINT virtual std::string to_string() final // NOLINT
{ {
return "type1"; return "type1";
} }
@ -44,7 +44,7 @@ struct type1 : default_type
struct type2 : default_type struct type2 : default_type
{ {
std::string to_string() // NOLINT virtual std::string to_string() final // NOLINT
{ {
return "type2"; return "type2";
} }
@ -52,21 +52,43 @@ struct type2 : default_type
struct type3 : default_type struct type3 : default_type
{ {
std::string to_string() // NOLINT virtual std::string to_string() final // NOLINT
{ {
return "type3"; return "type3";
} }
}; };
template <typename T>
void print()
{
BLT_TRACE("{}", blt::type_string<T>());
}
void test() void test()
{ {
// auto ptr = &default_type::to_string;
// auto ptr2 = reinterpret_cast<std::string(type3::*)()>(ptr);
// blt::black_box(hi.to_string());
// default_type* t = blt::black_box_ret(&hi);
// blt::black_box(t->to_string());
// BLT_TRACE("Validate:");
// BLT_TRACE("TYPE1: {}", type1{}.to_string());
// BLT_TRACE("TYPE2: {}", type2{}.to_string());
// BLT_TRACE("TYPE3: {}\n\n", type3{}.to_string());
// BLT_TRACE("Output:");
blt::variant_t<type1, type2, type3> some_type1{type1{}}; blt::variant_t<type1, type2, type3> some_type1{type1{}};
blt::variant_t<type1, type2, type3> some_type2{type2{}}; blt::variant_t<type1, type2, type3> some_type2{type2{}};
blt::variant_t<type1, type2, type3> some_type3{type3{}}; blt::variant_t<type1, type2, type3> some_type3{type3{}};
BLT_TRACE("TYPE1: {}", some_type1.call_member(&default_type::to_string)); BLT_TRACE("TYPE1: {}", some_type1.call_member_args(&default_type::to_string));
BLT_TRACE("TYPE2: {}", some_type2.call_member(&default_type::to_string)); BLT_TRACE("TYPE2: {}", some_type2.call_member_args(&default_type::to_string));
BLT_TRACE("TYPE3: {}", some_type3.call_member(&default_type::to_string)); BLT_TRACE("TYPE3: {}", some_type3.call_member_args(&default_type::to_string));
} }
using namespace blt::gp; using namespace blt::gp;