15 #include <gtest/gtest.h>
17 #include <type_traits>
25 TEST(ForwardLike, Rvalue) {
26 static_assert(std::is_same_v<decltype(beluga::forward_like<float&>(Object{})), Object&>);
27 static_assert(std::is_same_v<decltype(beluga::forward_like<const float&>(Object{})),
const Object&>);
28 static_assert(std::is_same_v<decltype(beluga::forward_like<float&&>(Object{})), Object&&>);
29 static_assert(std::is_same_v<decltype(beluga::forward_like<const float&&>(Object{})),
const Object&&>);
32 TEST(ForwardLike, MutableLvalue) {
33 auto object = Object{};
34 static_assert(std::is_same_v<decltype(beluga::forward_like<float&>(
object)), Object&>);
35 static_assert(std::is_same_v<decltype(beluga::forward_like<const float&>(
object)),
const Object&>);
36 static_assert(std::is_same_v<decltype(beluga::forward_like<float&&>(
object)), Object&>);
37 static_assert(std::is_same_v<decltype(beluga::forward_like<const float&&>(
object)),
const Object&&>);
40 TEST(ForwardLike, ConstLvalue) {
41 const auto object = Object{};
42 static_assert(std::is_same_v<decltype(beluga::forward_like<float&>(
object)),
const Object&>);
43 static_assert(std::is_same_v<decltype(beluga::forward_like<const float&>(
object)),
const Object&>);
44 static_assert(std::is_same_v<decltype(beluga::forward_like<float&&>(
object)),
const Object&>);
45 static_assert(std::is_same_v<decltype(beluga::forward_like<const float&&>(
object)),
const Object&&>);
48 TEST(ForwardLike, Value) {
49 const int value = 200;
50 ASSERT_EQ(beluga::forward_like<Object&>(50), 50);
51 ASSERT_EQ(beluga::forward_like<Object&>(value), 200);