[libcxx-commits] [libcxx] [libc++] Make `constexpr std::variant`. Implement P2231R1 (PR #83335)

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Fri Mar 1 09:52:57 PST 2024


================
@@ -298,23 +279,29 @@ void test_T_assignment_performs_assignment() {
 #endif // TEST_HAS_NO_EXCEPTIONS
 }
 
-void test_T_assignment_vector_bool() {
+TEST_CONSTEXPR_CXX20 bool test_T_assignment_vector_bool() {
 #ifndef _LIBCPP_ENABLE_NARROWING_CONVERSIONS_IN_VARIANT
   std::vector<bool> vec = {true};
   std::variant<bool, int> v;
   v = vec[0];
   assert(v.index() == 0);
   assert(std::get<0>(v) == true);
 #endif
+  return true;
 }
 
 int main(int, char**) {
   test_T_assignment_basic();
+  test_T_assignment_basic_no_constexpr();
----------------
ldionne wrote:

I would try to follow the pattern where we do:

```
int main() {
  test();
  test_non_constexpr();
#if TEST_STD_VER >= 20
  static_assert(test());
#endif
}
```

So that means you'd refactor e.g. the exceptions tests into the non-constexpr part, but keep everything you can in the common part. That would include the compile-time only tests. Technically there is no benefit in "running" those twice, but I think consistency should win here.

This comment applies to all tests.

https://github.com/llvm/llvm-project/pull/83335


More information about the libcxx-commits mailing list