@@ -620,3 +620,39 @@ TEST(OptionalRefTest, AssignFromOptional) {
620
620
// EXPECT_EQ(*optional_base_ref, derived(3,4));
621
621
622
622
}
623
+
624
+ TEST (OptionalRefTest, ConstructFromOptional) {
625
+ int var = 42 ;
626
+ beman::optional26::optional<int &> o1 = beman::optional26::nullopt ;
627
+ beman::optional26::optional<int &> o2{var};
628
+
629
+
630
+ using beman::optional26::tests::base;
631
+ using beman::optional26::tests::derived;
632
+
633
+ base b{1 };
634
+ derived d (1 , 2 );
635
+ beman::optional26::optional<base&> empty_base;
636
+ beman::optional26::optional<base&> engaged_base{b};
637
+
638
+ beman::optional26::optional<derived&> empty_derived_ref;
639
+ beman::optional26::optional<derived&> engaged_derived_ref{d};
640
+
641
+ beman::optional26::optional<base&> optional_base_ref{empty_derived_ref};
642
+ EXPECT_FALSE (optional_base_ref.has_value ());
643
+
644
+ beman::optional26::optional<base&> optional_base_ref2{engaged_derived_ref};
645
+ EXPECT_TRUE (optional_base_ref2.has_value ());
646
+
647
+ beman::optional26::optional<derived> empty_derived;
648
+ beman::optional26::optional<derived> engaged_derived{d};
649
+
650
+ static_assert (std::is_constructible_v<const base&, derived>);
651
+
652
+ beman::optional26::optional<const base&> optional_base_const_ref{empty_derived};
653
+ EXPECT_FALSE (optional_base_const_ref.has_value ());
654
+
655
+ beman::optional26::optional<const base&> optional_base_const_ref2{engaged_derived};
656
+ EXPECT_TRUE (optional_base_const_ref2.has_value ());
657
+
658
+ }
0 commit comments