p6.cpp revision ef7d78bd5be466c369b04af742ed8268244d4fe7
143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisvoid test_conversion() {
443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  int (*fp1)(int) = [](int x) { return x + 1; };
543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  void (*fp2)(int) = [](int x) { };
643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  const auto lambda = [](int x) { };
843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  void (*fp3)(int) = lambda;
943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
1043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  volatile const auto lambda2 = [](int x) { }; // expected-note{{but method is not marked volatile}}
1143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  void (*fp4)(int) = lambda2; // expected-error{{no viable conversion}}
1243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis}
1343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
1443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisvoid test_no_conversion() {
1543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  int (*fp1)(int) = [=](int x) { return x + 1; }; // expected-error{{no viable conversion}}
16769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  void (*fp2)(int) = [&](int x) { }; // expected-error{{no viable conversion}}
17769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis}
189fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
1943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisvoid test_wonky() {
2043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  const auto l = [](int x) mutable -> int { return + 1; };
2143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  l(17); // okay: uses conversion function
2243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis}
23769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis