================ @@ -24,6 +44,103 @@ using enum E; #endif } +namespace cwg2627 { // cwg2627: 19 +#if __cplusplus >= 202002L +struct C { + long long i : 8; + friend auto operator<=>(C, C) = default; +}; + +void f() { + C x{1}, y{2}; + static_cast<void>(x <=> y); + static_cast<void>(x.i <=> y.i); +} + +template<typename T> +struct CDependent { + T i : 8; + friend auto operator<=>(CDependent, CDependent) = default; +}; + +template<typename T> +concept three_way_comparable = requires(T t) { { t <=> t }; }; +template<typename T> +concept bf_three_way_comparable = requires(T t) { { t.i <=> t.i }; }; +static_assert(three_way_comparable<CDependent<long long>>); +static_assert(bf_three_way_comparable<CDependent<long long>>); +#endif + +#if __cplusplus >= 201103L +template<int W> +struct D { + __int128 i : W; +}; + +template<int W> +std::int64_t f(D<W> d) { + return std::int64_t{ d.i }; // #cwg2627-f +} + +template std::int64_t f(D<63>); +template std::int64_t f(D<64>); +template std::int64_t f(D<65>); +// since-cxx11-error-re@#cwg2627-f {{non-constant-expression cannot be narrowed from type '__int128' to 'std::int64_t' (aka '{{.+}}') in initializer list}} +// since-cxx11-note@-2 {{in instantiation of function template specialization 'cwg2627::f<65>' requested here}} +// since-cxx11-note@#cwg2627-f {{insert an explicit cast to silence this issue}} + +template<typename Target, typename Source> +Target g(Source x) { + return Target{ x.i }; // #cwg2627-g +} + +template<typename T, int N> +struct E { + T i : N; +}; + +template std::int16_t g(E<int, 16>); +template std::int16_t g(E<unsigned, 15>); +template std::int16_t g(E<unsigned, 16>); +// since-cxx11-error-re@#cwg2627-g {{non-constant-expression cannot be narrowed from type 'unsigned int' to '{{.+}}' in initializer list}} ---------------- Endilll wrote:
You should move expected directives under the line the error is emitted for. This makes you consistent with the rest of the DR tests, and match the original intention of closely tracking compiler output as seen on e.g. Compiler Explorer. https://github.com/llvm/llvm-project/pull/78112 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits