xref: /llvm-project/clang/test/Modules/concept_differ.cpp (revision a171d248ca34b8b6f8de11d42a83ad981285963a)
14b95a5a7SChuanqi Xu // RUN: rm -rf %t
24b95a5a7SChuanqi Xu // RUN: mkdir %t
34b95a5a7SChuanqi Xu // RUN: split-file %s %t
44b95a5a7SChuanqi Xu //
5*a171d248SMichael Spencer // RUN: %clang_cc1 -x c++ -std=c++20 -fmodules -fmodules-cache-path=%t -fmodule-map-file=%t/module.modulemap %t/foo.cpp -verify
64b95a5a7SChuanqi Xu 
7*a171d248SMichael Spencer //--- module.modulemap
84b95a5a7SChuanqi Xu module "foo" {
94b95a5a7SChuanqi Xu   export *
104b95a5a7SChuanqi Xu   header "foo.h"
114b95a5a7SChuanqi Xu }
124b95a5a7SChuanqi Xu module "bar" {
134b95a5a7SChuanqi Xu   export *
144b95a5a7SChuanqi Xu   header "bar.h"
154b95a5a7SChuanqi Xu }
164b95a5a7SChuanqi Xu 
174b95a5a7SChuanqi Xu //--- foo.h
184b95a5a7SChuanqi Xu template <class T>
194b95a5a7SChuanqi Xu concept A = true;
204b95a5a7SChuanqi Xu 
214b95a5a7SChuanqi Xu //--- bar.h
224b95a5a7SChuanqi Xu template <class T>
234b95a5a7SChuanqi Xu concept A = false;
244b95a5a7SChuanqi Xu 
254b95a5a7SChuanqi Xu //--- foo.cpp
264b95a5a7SChuanqi Xu #include "bar.h"
274b95a5a7SChuanqi Xu #include "foo.h"
284b95a5a7SChuanqi Xu 
foo()294b95a5a7SChuanqi Xu template <class T> void foo() requires A<T> {}  // expected-error 1+{{reference to 'A' is ambiguous}}
304b95a5a7SChuanqi Xu                                                 // expected-note@* 1+{{candidate found by name lookup}}
314b95a5a7SChuanqi Xu 
main()324b95a5a7SChuanqi Xu int main() {
334b95a5a7SChuanqi Xu   foo<int>();
344b95a5a7SChuanqi Xu   return 0;
354b95a5a7SChuanqi Xu }
36