43#include <boost/test/unit_test.hpp> 
   60static_assert(std::is_base_of<std::bad_cast, ki::bad_any_cast>::value,
 
   61          "ki::bad_any_cast must derive from std::bad_cast");
 
   67static_assert(std::is_assignable<any&, int>::value);
 
   68static_assert(!std::is_assignable<any&, std::unique_ptr<int>>::value);
 
   69static_assert(std::is_constructible<any, int>::value);
 
   70static_assert(!std::is_constructible<any, std::unique_ptr<int>>::value);
 
   71static_assert(!std::is_assignable<any&, const std::unique_ptr<int>&>::value);
 
   72static_assert(!std::is_constructible<any&, const std::unique_ptr<int>&>::value);
 
   73static_assert(!std::is_assignable<any&, std::unique_ptr<int>&>::value);
 
   74static_assert(!std::is_constructible<any&, std::unique_ptr<int>&>::value);
 
   81static_assert(!std::is_constructible_v<
any,
 
   82          std::in_place_type_t<NoDefaultCtor>>);
 
   84static_assert(!std::is_constructible_v<
any,
 
   85          std::in_place_type_t<NoDefaultCtor>&>);
 
   87static_assert(!std::is_constructible_v<
any,
 
   88          std::in_place_type_t<NoDefaultCtor>&&>);
 
   90static_assert(!std::is_constructible_v<
any,
 
   91          const std::in_place_type_t<NoDefaultCtor>&>);
 
   93static_assert(!std::is_constructible_v<
any,
 
   94          const std::in_place_type_t<NoDefaultCtor>&&>);
 
   96static_assert( std::is_copy_constructible_v<std::tuple<any>> );
 
   99    A(
const A&) = 
default;
 
 
  102static_assert(std::is_copy_constructible_v<A>);
 
  108    std::tuple<int, int> 
t;
 
  109    template<
class... Args>
 
  110    combined(std::initializer_list<int> il, Args&&... args)
 
  111      : 
v(il), 
t(
std::forward<Args>(args)...)
 
 
 
  133    string s, s2(
"Jane");
 
  135    BOOST_CHECK(s == 
"Meow");
 
 
  150    BOOST_CHECK(p == 
nullptr);
 
  154    BOOST_CHECK(p != 
nullptr);
 
  158    BOOST_CHECK(p == 
nullptr);
 
  163    } 
catch (
const bad_any_cast&) {
 
 
  173        MoveEnabled(MoveEnabled&&)
 
  177        MoveEnabled() = 
default;
 
  178        MoveEnabled(
const MoveEnabled&) = 
default;
 
 
  192        ExplicitCopy() = 
default;
 
  193        explicit ExplicitCopy(
const ExplicitCopy&) = 
default;
 
  195    any x = ExplicitCopy();
 
 
  204        noncopyable(noncopyable 
const&) = 
delete;
 
  209    BOOST_CHECK( p == 
nullptr );
 
 
  219    void (*p1)() = 
any_cast<
void()>(&a);
 
  220    BOOST_CHECK( p1 == 
nullptr );
 
  221    int (*p2)(int) = 
any_cast<
int(
int)>(&a);
 
  222    BOOST_CHECK( p2 == 
nullptr );
 
  223    int (*p3)() = 
any_cast<
int()>(&std::as_const(a));
 
  224    BOOST_CHECK( p3 == 
nullptr );
 
  228        BOOST_CHECK( 
false );
 
  234        BOOST_CHECK( 
false );
 
  240        BOOST_CHECK( 
false );
 
 
  251    BOOST_CHECK( a.
type() == 
typeid(
int*) );    
 
  253    BOOST_CHECK( a.
type() != 
typeid(
int[3]) ); 
 
  254    BOOST_CHECK( p1 == 
nullptr );
 
  256    BOOST_CHECK( a.
type() != 
typeid(
int[]) );   
 
  257    BOOST_CHECK( p2 == 
nullptr );
 
  259    BOOST_CHECK( p3 == 
nullptr );
 
 
  274static_assert(std::is_nothrow_move_constructible<LocationAware>::value, 
"");
 
  275static_assert(!std::is_trivially_copyable<LocationAware>::value, 
"");
 
  291        any tmp = std::move(a);
 
 
  312    BOOST_CHECK( i2 == 42 );
 
  313    BOOST_CHECK( &i2 != &i );
 
  316    BOOST_CHECK( std::get<0>(t) == 1 && std::get<1>(t) == 2);
 
  319    BOOST_CHECK(v[0] == 42 && v[1] == 666);
 
  322    BOOST_CHECK(c.v[0] == 42 && c.v[1] == 666
 
  323       && std::get<0>(c.t) == 0 && std::get<1>(c.t) == 0 );
 
  326    BOOST_CHECK(c2.v[0] == 1 && c2.v[1] == 2
 
  327       && std::get<0>(c2.t) == 3 && std::get<1>(c2.t) == 4 );
 
 
  334    BOOST_CHECK( x.
type() == 
typeid(
void) );
 
  336    BOOST_CHECK( x.
type() == 
typeid(
int) );
 
  338    BOOST_CHECK( x.
type() == 
typeid(
void) );
 
 
  371    any o(std::in_place_type<int>, i);
 
  373    BOOST_CHECK( i2 == 42 );
 
  374    BOOST_CHECK( &i2 != &i );
 
  375    any o2(std::in_place_type<std::tuple<int, int>>, 1, 2);
 
  377    BOOST_CHECK( std::get<0>(t) == 1 && std::get<1>(t) == 2);
 
  378    any o3(std::in_place_type<std::vector<int>>, {42, 666});
 
  380    BOOST_CHECK(v[0] == 42 && v[1] == 666);
 
  381    any o4(std::in_place_type<combined>, {42, 666});
 
  383    BOOST_CHECK(c.v[0] == 42 && c.v[1] == 666
 
  384       && std::get<0>(c.t) == 0 && std::get<1>(c.t) == 0 );
 
  385    any o5(std::in_place_type<combined>, {1, 2}, 3, 4);
 
  387    BOOST_CHECK(c2.v[0] == 1 && c2.v[1] == 2
 
  388       && std::get<0>(c2.t) == 3 && std::get<1>(c2.t) == 4 );
 
  389    any o6(std::in_place_type<int&>, i);
 
  391    any o7(std::in_place_type<
void()>, 
nullptr);
 
  392    any o8(std::in_place_type<
void(*)()>, 
nullptr);
 
  393    BOOST_CHECK(o7.
type() == o8.
type());
 
  394    any o9(std::in_place_type<
char(&)[42]>, 
nullptr);
 
  395    any o10(std::in_place_type<char*>, 
nullptr);
 
  396    BOOST_CHECK(o9.
type() == o10.
type());
 
 
  422    BOOST_CHECK(
moved == 
false);
 
  423    any a2(std::move(x));
 
  424    BOOST_CHECK(
moved == 
true);
 
 
  433    BOOST_CHECK(
moved == 
false);
 
  435    any a2(std::move(a1));
 
  436    BOOST_CHECK(
copied == 
false);
 
 
  445    BOOST_CHECK(
moved == 
false);
 
  447    any a2(std::move(a1));
 
  448    BOOST_CHECK(
copied == 
false);
 
  449    BOOST_CHECK(
moved == 
true);
 
 
  485    auto a = 
any(std::in_place_type<any>, 5);
 
 
  492    any p = std::pair<any, any>(1, 1);
 
  497    any t = std::tuple<any>(1);
 
 
  504struct alignas(2 * alignof(void*)) 
X3 { };
 
  509    std::uintptr_t a_addr = 
reinterpret_cast<std::uintptr_t
>(&a);
 
  510    std::uintptr_t a_end = a_addr + 
sizeof(a);
 
  511    std::uintptr_t obj_addr = 
reinterpret_cast<std::uintptr_t
>(obj);
 
  512    return (a_addr <= obj_addr) && (obj_addr < a_end);
 
 
  620    BOOST_CHECK( !x.a.has_value() );
 
  624    BOOST_CHECK( x.a.has_value() );
 
 
  652    BOOST_CHECK(
moved == 
false);
 
  656    BOOST_CHECK(
moved == 
true);
 
  657    BOOST_CHECK(
copied == 
false);
 
 
  667    BOOST_CHECK(
moved == 
false);
 
  671    BOOST_CHECK(
moved == 
false);
 
  672    BOOST_CHECK(
copied == 
false);
 
 
  687    BOOST_CHECK(
moved == 
true);
 
  688    BOOST_CHECK(
copied == 
false);
 
 
  782    BOOST_CHECK( i2 == 42 );
 
  783    BOOST_CHECK( &i2 != &i );
 
  785    o2.
emplace<std::tuple<int, int>>(1, 2);
 
  787    BOOST_CHECK( std::get<0>(t) == 1 && std::get<1>(t) == 2);
 
  789    o3.
emplace<std::vector<int>>({42, 666});
 
  791    BOOST_CHECK(v[0] == 42 && v[1] == 666);
 
  795    BOOST_CHECK(c.v[0] == 42 && c.v[1] == 666
 
  796       && std::get<0>(c.t) == 0 && std::get<1>(c.t) == 0 );
 
  800    BOOST_CHECK(c2.v[0] == 1 && c2.v[1] == 2
 
  801       && std::get<0>(c2.t) == 3 && std::get<1>(c2.t) == 4 );
 
  808    o8.
emplace<void(*)()>(
nullptr);
 
  809    BOOST_CHECK(o7.
type() == o8.
type());
 
  811    o9.
emplace<char(&)[42]>(
nullptr);
 
  814    BOOST_CHECK(o9.
type() == o10.
type());
 
  817    BOOST_CHECK(&o11.
emplace<std::vector<int>>({1,2,3}) ==
 
 
A type-safe container of any type.
 
bool has_value() const noexcept
Report whether there is a contained object or not.
 
void reset() noexcept
If not empty, destroys the contained object.
 
void swap(any &rhs) noexcept
Exchange state with another object.
 
any_emplace_t< std::decay_t< T >, Args... > emplace(Args &&... args)
Emplace with an object created from args as the contained object.
 
const std::type_info & type() const noexcept
The typeid of the contained object, or typeid(void) if empty.
 
Exception class thrown by a failed any_cast.
 
An implementation of std::any_cast, which uses type_info::hash_code to check validity of cast types.
 
std::enable_if_t< std::is_constructible_v< any, std::in_place_type_t< T >, Args... >, any > make_any(Args &&... args)
Create a any holding a T constructed from args....
 
ValueType any_cast(const any &any)
Access the contained object.
 
Good(const Good &)=default
 
LocationAware & operator=(const LocationAware &)
 
LocationAware(LocationAware &&) noexcept
 
LocationAware(const LocationAware &)
 
LocationAware & operator=(LocationAware &&) noexcept
 
combined(std::initializer_list< int > il, Args &&... args)
 
wrapper(const wrapper &w)
 
auto & operator=(const any &t)
 
auto & operator=(const wrapper &w)
 
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
 
BOOST_AUTO_TEST_SUITE_END()
 
bool stored_internally(void *obj, const ki::any &a)
 
BOOST_AUTO_TEST_CASE(AnyCast_1)
 
std::set< const void * > live_objects
 
ValueType any_cast(const any &any)
Access the contained object.
 
MATRIX3x3D m2(VECTOR3I{ 6, 6, 6 }, { 1, 1, 1 }, { 3, 3, 3 })
Test suite for KiCad math code.
 
MATRIX3x3D m3(VECTOR3I{ 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 })