mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
try_implicit_cast<>() supports non default constructible target types
This commit is contained in:
parent
38e43e58ad
commit
224a072120
@ -101,10 +101,17 @@ struct TryImplicitCastImpl
|
||||
};
|
||||
|
||||
template <typename To, typename From>
|
||||
To try_implicit_cast(const From& from, const To& default_ = To())
|
||||
To try_implicit_cast(const From& from, const To& default_)
|
||||
{
|
||||
return TryImplicitCastImpl<From, To>::impl(from, default_,
|
||||
BooleanType<IsImplicitlyConvertibleFromTo<From, To>::Result>());
|
||||
}
|
||||
|
||||
template <typename To, typename From>
|
||||
To try_implicit_cast(const From& from)
|
||||
{
|
||||
return TryImplicitCastImpl<From, To>::impl(from, To(),
|
||||
BooleanType<IsImplicitlyConvertibleFromTo<From, To>::Result>());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
#include <uavcan/util/compile_time.hpp>
|
||||
|
||||
struct NonConvertible { };
|
||||
|
||||
struct ConvertibleToBool
|
||||
{
|
||||
const bool value;
|
||||
@ -14,6 +15,11 @@ struct ConvertibleToBool
|
||||
bool operator!() const { return !value; }
|
||||
};
|
||||
|
||||
struct NonDefaultConstructible
|
||||
{
|
||||
NonDefaultConstructible(int) { }
|
||||
};
|
||||
|
||||
TEST(Util, TryImplicitCast)
|
||||
{
|
||||
using uavcan::try_implicit_cast;
|
||||
@ -30,4 +36,7 @@ TEST(Util, TryImplicitCast)
|
||||
ASSERT_FALSE(try_implicit_cast<bool>(ConvertibleToBool(false), true));
|
||||
ASSERT_EQ(1, try_implicit_cast<long>(ConvertibleToBool(true)));
|
||||
ASSERT_EQ(0, try_implicit_cast<long>(ConvertibleToBool(false), -100));
|
||||
|
||||
//try_implicit_cast<NonDefaultConstructible>(ConvertibleToBool(true)); // Will fail to compile
|
||||
try_implicit_cast<NonDefaultConstructible>(NonConvertible(), NonDefaultConstructible(64));
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user