blob: 08c3bc0a19b69c5a5b9b0f1a9a779e9a2b85f028 (
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
|
// Contributed by Dodji Seketeli <dodji@redhat.com>
// Origin PR c++/40808
// { dg-do compile }
// This tests the mangling of empty template argument list in a template
// id.
// { dg-final { scan-assembler "_ZNK5DummyclI3GenEENT_3SigIE10ResultTypeERKS2_" } }
struct Void {};
template <class R> struct FunType {
typedef R ResultType;
};
struct WrongNumberOfSigArgs {};
template <typename R> struct CFunType {
template <class Dummy1=Void, class Dummy2=Void> struct Sig : public
FunType<WrongNumberOfSigArgs> {};
template <class Dummy> struct Sig<Void,Dummy> : public FunType<R> {};
};
struct Dummy {
template <typename F> typename F::template Sig<>::ResultType operator()(F
const& f) const {
return typename F::template Sig<>::ResultType(0);
}
};
struct Gen: public CFunType<int> {
int operator()() const {return 0;}
Gen() {}
};
int myfunction() {
return Dummy()(Gen());
}
int main() {
myfunction();
}
|