================ @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %s + +// Scalar types are bitwise copyable. +static_assert(__is_bitwise_copyable(int)); +static_assert(__is_bitwise_copyable(int*)); +// array +static_assert(__is_bitwise_copyable(int[10])); + + +struct Forward; // expected-note 2{{forward declaration of 'Forward'}} +static_assert(!__is_bitwise_copyable(Forward)); // expected-error {{incomplete type 'Forward' used in type trait expression}} + +struct Foo { int a; }; +static_assert(__is_bitwise_copyable(Foo)); + +struct DynamicClass { virtual int Foo(); }; +static_assert(__is_bitwise_copyable(DynamicClass)); + +template <typename T> +void TemplateFunction() { + static_assert(__is_bitwise_copyable(T)); // expected-error {{incomplete type 'Forward' used in type trait expression}} +} +void CallTemplateFunc() { + TemplateFunction<Forward>(); // expected-note {{in instantiation of function template specialization}} + TemplateFunction<Foo>(); +} ---------------- hokein wrote:
Added some negative test cases (`int&`). Note that `struct Foo { int &x; };` is considered bitwise cloneable (as it is trivially copyable). https://github.com/llvm/llvm-project/pull/86512 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits