1*05a21351SRichard Smith // RUN: %clang_cc1 -std=c++1z -fmodules %s -verify 2*05a21351SRichard Smith // expected-no-diagnostics 3*05a21351SRichard Smith 4*05a21351SRichard Smith #pragma clang module build std 5*05a21351SRichard Smith module std { module limits {} module other {} } 6*05a21351SRichard Smith #pragma clang module contents 7*05a21351SRichard Smith #pragma clang module begin std.limits 8*05a21351SRichard Smith template<typename T> struct numeric_limits { 9*05a21351SRichard Smith static constexpr T __max = 5; 10*05a21351SRichard Smith static constexpr T max() { return __max; } 11*05a21351SRichard Smith }; 12*05a21351SRichard Smith #pragma clang module end 13*05a21351SRichard Smith #pragma clang module begin std.other f()14*05a21351SRichard Smithinline void f() { numeric_limits<int> nl; } 15*05a21351SRichard Smith #pragma clang module end 16*05a21351SRichard Smith #pragma clang module endbuild 17*05a21351SRichard Smith 18*05a21351SRichard Smith #pragma clang module build module_b 19*05a21351SRichard Smith module module_b {} 20*05a21351SRichard Smith #pragma clang module contents 21*05a21351SRichard Smith #pragma clang module begin module_b 22*05a21351SRichard Smith #pragma clang module import std.limits 23*05a21351SRichard Smith constexpr int a = numeric_limits<int>::max(); 24*05a21351SRichard Smith #pragma clang module end 25*05a21351SRichard Smith #pragma clang module endbuild 26*05a21351SRichard Smith 27*05a21351SRichard Smith #pragma clang module import std.limits 28*05a21351SRichard Smith #pragma clang module import module_b 29*05a21351SRichard Smith constexpr int b = a; 30*05a21351SRichard Smith static_assert(b == 5); 31