The tests don't specify a triple in some cases, since they shouldn't be necessary, so I've updated the tests to detect via macro when they are running on win32 to give the slightly altered diagnostic.
59 lines
2.4 KiB
C++
59 lines
2.4 KiB
C++
// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
|
|
// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify -triple i386-windows
|
|
|
|
void defargs() {
|
|
auto l1 = [](int i, int j = 17, int k = 18) { return i + j + k; };
|
|
int i1 = l1(1);
|
|
int i2 = l1(1, 2);
|
|
int i3 = l1(1, 2, 3);
|
|
}
|
|
|
|
|
|
void defargs_errors() {
|
|
auto l1 = [](int i,
|
|
int j = 17,
|
|
int k) { }; // expected-error{{missing default argument on parameter 'k'}}
|
|
|
|
auto l2 = [](int i, int j = i) {}; // expected-error{{default argument references parameter 'i'}}
|
|
|
|
int foo;
|
|
auto l3 = [](int i = foo) {}; // expected-error{{default argument references local variable 'foo' of enclosing function}}
|
|
}
|
|
|
|
struct NonPOD {
|
|
NonPOD();
|
|
NonPOD(const NonPOD&);
|
|
~NonPOD();
|
|
};
|
|
|
|
struct NoDefaultCtor {
|
|
NoDefaultCtor(const NoDefaultCtor&); // expected-note{{candidate constructor}} \
|
|
// expected-note{{candidate constructor not viable: requires 1 argument, but 0 were provided}}
|
|
~NoDefaultCtor();
|
|
};
|
|
|
|
template<typename T>
|
|
void defargs_in_template_unused(T t) {
|
|
auto l1 = [](const T& value = T()) { }; // expected-error{{no matching constructor for initialization of 'NoDefaultCtor'}}
|
|
l1(t);
|
|
}
|
|
|
|
template void defargs_in_template_unused(NonPOD);
|
|
template void defargs_in_template_unused(NoDefaultCtor); // expected-note{{in instantiation of function template specialization 'defargs_in_template_unused<NoDefaultCtor>' requested here}}
|
|
|
|
template<typename T>
|
|
void defargs_in_template_used() {
|
|
auto l1 = [](const T& value = T()) { }; // expected-error{{no matching constructor for initialization of 'NoDefaultCtor'}} \
|
|
// expected-note{{candidate function not viable: requires single argument 'value', but no arguments were provided}}
|
|
#if defined(_WIN32) && !defined(_WIN64)
|
|
// expected-note@46{{conversion candidate of type 'void (*)(const NoDefaultCtor &) __attribute__((thiscall))'}}
|
|
#else
|
|
// expected-note@46{{conversion candidate of type 'void (*)(const NoDefaultCtor &)'}}
|
|
#endif
|
|
l1(); // expected-error{{no matching function for call to object of type '(lambda at }}
|
|
}
|
|
|
|
template void defargs_in_template_used<NonPOD>();
|
|
template void defargs_in_template_used<NoDefaultCtor>(); // expected-note{{in instantiation of function template specialization}}
|
|
|