The language forbids defining enums in prototypes, so this check is normally redundant, but if an enum is defined during template instantiation it should not be added to the prototype scope. While at it, clean up the code that deals with tag definitions in prototype scope and expand the visibility warning to cover the case where an anonymous enum is defined. Differential Revision: http://llvm-reviews.chandlerc.com/D2742 llvm-svn: 201927
43 lines
563 B
C++
43 lines
563 B
C++
// RUN: %clang_cc1 -fsyntax-only %s
|
|
|
|
template<typename T, T I, int J>
|
|
struct adder {
|
|
enum {
|
|
value = I + J,
|
|
value2
|
|
};
|
|
};
|
|
|
|
int array1[adder<long, 3, 4>::value == 7? 1 : -1];
|
|
|
|
namespace PR6375 {
|
|
template<typename T>
|
|
void f() {
|
|
enum Enum
|
|
{
|
|
enumerator1 = 0xFFFFFFF,
|
|
enumerator2 = enumerator1 - 1
|
|
};
|
|
|
|
int xb1 = enumerator1;
|
|
int xe1 = enumerator2;
|
|
}
|
|
|
|
template void f<int>();
|
|
}
|
|
|
|
namespace EnumScoping {
|
|
|
|
template <typename T>
|
|
class C {
|
|
enum {
|
|
value = 42
|
|
};
|
|
};
|
|
|
|
void f(int i, C<int>::C c) {
|
|
int value;
|
|
}
|
|
|
|
}
|