[cfe-commits] r132661 - /cfe/trunk/test/SemaCXX/generalized-initializers.cpp
Sebastian Redl
sebastian.redl at getdesigned.at
Sun Jun 5 05:23:08 PDT 2011
Author: cornedbee
Date: Sun Jun 5 07:23:08 2011
New Revision: 132661
URL: http://llvm.org/viewvc/llvm-project?rev=132661&view=rev
Log:
Expand on braced init list tests.
Modified:
cfe/trunk/test/SemaCXX/generalized-initializers.cpp
Modified: cfe/trunk/test/SemaCXX/generalized-initializers.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/generalized-initializers.cpp?rev=132661&r1=132660&r2=132661&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/generalized-initializers.cpp (original)
+++ cfe/trunk/test/SemaCXX/generalized-initializers.cpp Sun Jun 5 07:23:08 2011
@@ -81,47 +81,91 @@
namespace objects {
+ template <int N>
struct A {
- A();
- A(int, double);
- A(int, int);
- A(std::initializer_list<int>);
-
- int operator[](A);
+ A() { static_assert(N == 0, ""); }
+ A(int, double) { static_assert(N == 1, ""); }
+ A(int, int) { static_assert(N == 2, ""); }
+ A(std::initializer_list<int>) { static_assert(N == 3, ""); }
};
void initialization() {
// FIXME: how to ensure correct overloads are called?
- { A a{}; }
- { A a = {}; }
- { A a{1, 1.0}; }
- { A a = {1, 1.0}; }
- { A a{1, 2, 3, 4, 5, 6, 7, 8}; }
- { A a = {1, 2, 3, 4, 5, 6, 7, 8}; }
- { A a{1, 2, 3, 4, 5, 6, 7, 8}; }
- { A a{1, 2}; }
+ { A<0> a{}; }
+ { A<0> a = {}; }
+ { A<1> a{1, 1.0}; }
+ { A<1> a = {1, 1.0}; }
+ { A<3> a{1, 2, 3, 4, 5, 6, 7, 8}; }
+ { A<3> a = {1, 2, 3, 4, 5, 6, 7, 8}; }
+ { A<3> a{1, 2, 3, 4, 5, 6, 7, 8}; }
+ { A<3> a{1, 2}; }
}
- A function_call() {
- void takes_A(A);
- takes_a({1, 1.0});
+ struct C {
+ C();
+ C(int, double);
+ C(int, int);
+ C(std::initializer_list<int>);
+
+ int operator[](C);
+ };
- A a;
- a[{1, 1.0}];
+ C function_call() {
+ void takes_C(C);
+ takes_C({1, 1.0});
+
+ C c;
+ c[{1, 1.0}];
return {1, 1.0};
}
void inline_init() {
- (void) A{1, 1.0};
- (void) new A{1, 1.0};
+ (void) A<1>{1, 1.0};
+ (void) new A<1>{1, 1.0};
}
struct B {
- B(A, int, A);
+ B(C, int, C);
};
void nested_init() {
B b{{1, 1.0}, 2, {3, 4, 5, 6, 7}};
}
}
+
+namespace litb {
+
+ // invalid
+ struct A { int a[2]; A():a({1, 2}) { } }; // expected-error {{}}
+
+ // invalid
+ int a({0}); // expected-error {{}}
+
+ // invalid
+ int const &b({0}); // expected-error {{}}
+
+ struct C { explicit C(int, int); C(int, long); };
+
+ // invalid
+ C c({1, 2}); // expected-error {{}}
+
+ // valid (by copy constructor).
+ C d({1, 2L}); // expected-error {{}}
+
+ // valid
+ C e{1, 2};
+
+ struct B {
+ template<typename ...T>
+ B(initializer_list<int>, T ...);
+ };
+
+ // invalid (the first phase only considers init-list ctors)
+ // (for the second phase, no constructor is viable)
+ B f{1, 2, 3};
+
+ // valid (T deduced to <>).
+ B g({1, 2, 3});
+
+}
More information about the cfe-commits
mailing list