1acf3bdc2SBruno Ricci // RUN: %clang_cc1 %s -std=c++11 -fsyntax-only -verify
2acf3bdc2SBruno Ricci
f1()3acf3bdc2SBruno Ricci void f1() { return {1,2}; } // expected-error {{void function 'f1' must not return a value}}
4acf3bdc2SBruno Ricci
f2()5acf3bdc2SBruno Ricci template <typename T> void f2() { return {1,2}; } // expected-error {{void function 'f2' must not return a value}}
6acf3bdc2SBruno Ricci
f2()7*eb10b065SBruno Ricci template <> void f2<float>() { return {1, 2}; } // expected-error {{void function 'f2<float>' must not return a value}}
8acf3bdc2SBruno Ricci
test_f2()9acf3bdc2SBruno Ricci void test_f2() {
10acf3bdc2SBruno Ricci f2<int>();
11acf3bdc2SBruno Ricci f2<float>();
12acf3bdc2SBruno Ricci }
13acf3bdc2SBruno Ricci
14acf3bdc2SBruno Ricci struct S {
f3S15acf3bdc2SBruno Ricci void f3() { return {1,2}; } // expected-error {{void function 'f3' must not return a value}}
SS16acf3bdc2SBruno Ricci S() { return {1,2}; } // expected-error {{constructor 'S' must not return a value}}
~SS17acf3bdc2SBruno Ricci ~S() { return {1,2}; } // expected-error {{destructor '~S' must not return a value}}
18acf3bdc2SBruno Ricci };
19acf3bdc2SBruno Ricci
20acf3bdc2SBruno Ricci template <typename T> struct ST {
f4ST21acf3bdc2SBruno Ricci void f4() { return {1,2}; } // expected-error {{void function 'f4' must not return a value}}
STST22acf3bdc2SBruno Ricci ST() { return {1,2}; } // expected-error {{constructor 'ST<T>' must not return a value}}
~STST23acf3bdc2SBruno Ricci ~ST() { return {1,2}; } // expected-error {{destructor '~ST<T>' must not return a value}}
24acf3bdc2SBruno Ricci };
25acf3bdc2SBruno Ricci
26acf3bdc2SBruno Ricci ST<int> st;
27