1f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith// RUN: %clang_cc1 -pedantic-errors -std=c++11 -emit-pch %s -o %t
2f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith// RUN: %clang_cc1 -pedantic-errors -std=c++11 -include-pch %t -verify %s
3f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith
4f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith#ifndef HEADER_INCLUDED
5f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith
6f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith#define HEADER_INCLUDED
7f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith
8f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smithtemplate<typename T> struct S {
9f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith  enum class E {
1078541c433049322b27b4f437973076ba29cff709Jordan Rose    e = T()
11f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith  };
12f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith};
13f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith
14f1c66b40213784a1c4612f04c14cafa2b0e89988Richard SmithS<int> a;
15f1c66b40213784a1c4612f04c14cafa2b0e89988Richard SmithS<long>::E b;
16f1c66b40213784a1c4612f04c14cafa2b0e89988Richard SmithS<double>::E c;
17f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smithtemplate struct S<char>;
18f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith
19f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith#else
20f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith
21f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smithint k1 = (int)S<int>::E::e;
22f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smithint k2 = (int)decltype(b)::e;
2378541c433049322b27b4f437973076ba29cff709Jordan Roseint k3 = (int)decltype(c)::e; // expected-error@10 {{conversion from 'double' to 'int'}} expected-note {{here}}
24f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smithint k4 = (int)S<char>::E::e;
25f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith
26f1c66b40213784a1c4612f04c14cafa2b0e89988Richard Smith#endif
27