blob: 844a4833bf7c255fb50b54ecdce3a287f1498b98 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: split-file %s %t
//
// RUN: %clang_cc1 -xc++ -std=c++20 -fmodules -fmodule-name=library \
// RUN: -emit-module %t/modules.map \
// RUN: -o %t/module.pcm \
// RUN: -verify
//
//--- modules.map
module "library" {
export *
module "concepts" {
export *
header "concepts.h"
}
module "conflicting" {
export *
header "conflicting.h"
}
}
//--- concepts.h
#ifndef CONCEPTS_H_
#define CONCEPTS_H_
template <class T>
concept ConflictingConcept = true;
template <class T, class U>
concept same_as = __is_same(T, U);
template<class T> concept truec = true;
int var;
#endif // SAMEAS_CONCEPTS_H
//--- conflicting.h
#ifndef CONFLICTING_H
#define CONFLICTING_H
#include "concepts.h"
template <class T, class U = int>
concept ConflictingConcept = true; // expected-error {{redefinition of concept 'ConflictingConcept' with different template}}
// expected-note@* {{previous definition}}
int same_as; // expected-error {{redefinition of 'same_as' as different kind of symbol}}
// expected-note@* {{previous definition}}
template<class T> concept var = false; // expected-error {{redefinition of 'var' as different kind of symbol}}
// expected-note@* {{previous definition}}
template<class T> concept truec = true; // expected-error {{redefinition of 'truec'}}
// expected-note@* {{previous definition}}
#endif // CONFLICTING_H
|