// RUN: rm -rf %t // RUN: mkdir %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-module-interface -o %t/A.pcm // RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t -I%t -DDIFFERENT %t/B.cppm -verify // RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t -I%t %t/B.cppm -verify // // Testing the behavior of `-fskip-odr-check-in-gmf` // RUN: %clang_cc1 -std=c++20 -fskip-odr-check-in-gmf %t/A.cppm -emit-module-interface -o %t/A.pcm // RUN: %clang_cc1 -std=c++20 -fskip-odr-check-in-gmf -fprebuilt-module-path=%t -I%t \ // RUN: -DDIFFERENT -DSKIP_ODR_CHECK_IN_GMF %t/B.cppm -verify //--- foo.h #ifndef FOO_H #define FOO_H template concept Range = requires(T &t) { t.begin(); }; template concept __integer_like = true; template concept __member_size = requires(_Tp &&t) { t.size(); }; template concept C = requires(First x, Second y) { x + y; }; struct A { public: template using range_type = T; }; struct __fn { template <__member_size _Tp> constexpr __integer_like auto operator()(_Tp&& __t) const { return __t.size(); } template <__integer_like _Tp, C<_Tp> Sentinel> constexpr _Tp operator()(_Tp &&__t, Sentinel &&last) const { return __t; } template