xref: /llvm-project/clang/test/Headers/header-unit-common-cmp-cat.cpp (revision 12ae1ea13e68657ac75d65fd62385cae5272e2cb)
1 // RUN: rm -fR %t
2 // RUN: split-file %s %t
3 // RUN: cd %t
4 // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header bz1.h
5 // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header bz2.h
6 // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header -fmodule-file=bz1.pcm -fmodule-file=bz2.pcm bz.cpp
7 
8 //--- compare
9 namespace std {
10 namespace __detail {
11 
12 template<typename _Tp>
13 inline constexpr unsigned __cmp_cat_id = 1;
14 
15 template<typename... _Ts>
16 constexpr auto __common_cmp_cat() {
17   (__cmp_cat_id<_Ts> | ...);
18 }
19 
20 } // namespace __detail
21 } // namespace std
22 
23 //--- bz0.h
24 template <class T>
25 int operator|(T, T);
26 
27 //--- bz1.h
28 #include "bz0.h"
29 #include <compare>
30 // expected-no-diagnostics
31 
32 //--- bz2.h
33 #include <compare>
34 // expected-no-diagnostics
35 
36 //--- bz.cpp
37 #include <compare>
38 
39 import "bz1.h"; // expected-warning {{the implementation of header units is in an experimental phase}}
40 import "bz2.h"; // expected-warning {{the implementation of header units is in an experimental phase}}
41