| // RUN: %clang_cc1 -std=c++1z -fmodules %s -verify | |
| // expected-no-diagnostics | |
| #pragma clang module build std | |
| module std { module limits {} module other {} } | |
| #pragma clang module contents | |
| #pragma clang module begin std.limits | |
| template<typename T> struct numeric_limits { | |
| static constexpr T __max = 5; | |
| static constexpr T max() { return __max; } | |
| }; | |
| #pragma clang module end | |
| #pragma clang module begin std.other | |
| inline void f() { numeric_limits<int> nl; } | |
| #pragma clang module end | |
| #pragma clang module endbuild | |
| #pragma clang module build module_b | |
| module module_b {} | |
| #pragma clang module contents | |
| #pragma clang module begin module_b | |
| #pragma clang module import std.limits | |
| constexpr int a = numeric_limits<int>::max(); | |
| #pragma clang module end | |
| #pragma clang module endbuild | |
| #pragma clang module import std.limits | |
| #pragma clang module import module_b | |
| constexpr int b = a; | |
| static_assert(b == 5); |