Mercurial > hg > CbC > CbC_llvm
view clang/test/Modules/redundant-template-default-arg3.cpp @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | |
children |
line wrap: on
line source
// RUN: rm -rf %t // RUN: mkdir %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 %t/foo.cppm -I%t -emit-module-interface -o %t/foo.pcm // RUN: %clang_cc1 -fprebuilt-module-path=%t -std=c++20 %t/use.cpp -I%t/. -fsyntax-only -verify //--- foo.h template <typename T = int> T v; template <int T = 8> int v2; template <typename T> class my_array {}; template <template <typename> typename C = my_array> int v3; template <typename T, int *i = nullptr> T v4; template <typename T, T *i = nullptr> T v5; inline int a = 43; template <typename T, int *i = &a> T v6; inline int b = 43; template <typename T, T *i = &b> T v7; template <int T = (3 > 2)> int v8; consteval int getInt() { return 55; } template <int T = getInt()> int v9; //--- foo_bad.h template <typename T = double> T v; template <int T = 9> int v2; template <typename T> class others_array {}; template <template <typename> typename C = others_array> int v3; static int a; consteval int *getIntPtr() { return &a; } template <typename T, int *i = getIntPtr()> T v4; consteval void *getVoidPtr() { return &a; } template <typename T, T *i = getVoidPtr()> T v5; inline int a_ = 43; template <typename T, int *i = &a_> T v6; inline int b_ = 43; template <typename T, T *i = &b_> T v7; template <int T = -1> int v8; consteval int getInt2() { return 55; } template <int T = getInt2()> int v9; //--- foo.cppm module; #include "foo.h" export module foo; //--- use.cpp import foo; #include "foo_bad.h" // expected-error@foo_bad.h:1 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:1 {{previous default template argument defined in module foo.<global>}} // expected-error@foo_bad.h:4 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:4 {{previous default template argument defined in module foo.<global>}} // expected-error@foo_bad.h:10 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:10 {{previous default template argument defined in module foo.<global>}} // expected-error@foo_bad.h:17 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:13 {{previous default template argument defined in module foo.<global>}} // expected-error@foo_bad.h:23 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:16 {{previous default template argument defined in module foo.<global>}} // expected-error@foo_bad.h:27 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:20 {{previous default template argument defined in module foo.<global>}} // expected-error@foo_bad.h:31 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:24 {{previous default template argument defined in module foo.<global>}} // expected-error@foo_bad.h:34 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:27 {{previous default template argument defined in module foo.<global>}} // expected-error@foo_bad.h:40 {{template parameter default argument is inconsistent with previous definition}} // expected-note@foo.h:33 {{previous default template argument defined in module foo.<global>}}