// RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors // RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors // RUN: %clang_cc1 -std=c++1z %s -verify -fexceptions -fcxx-exceptions -pedantic-errors #if __cplusplus < 201103L // expected-no-diagnostics #endif namespace dr1715 { // dr1715: 3.9 #if __cplusplus >= 201103L struct B { template B(T, typename T::Q); }; class S { using Q = int; template friend B::B(T, typename T::Q); }; struct D : B { using B::B; }; struct E : B { // expected-note 2{{candidate}} template E(T t, typename T::Q q) : B(t, q) {} // expected-note {{'Q' is a private member}} }; B b(S(), 1); D d(S(), 2); E e(S(), 3); // expected-error {{no match}} #endif } namespace dr1736 { // dr1736: 3.9 #if __cplusplus >= 201103L struct S { template S(T t) { struct L : S { using S::S; }; typename T::type value; // expected-error {{no member}} L l(value); // expected-note {{instantiation of}} } }; struct Q { typedef int type; } q; S s(q); // expected-note {{instantiation of}} #endif } namespace dr1756 { // dr1756: 3.7 #if __cplusplus >= 201103L // Direct-list-initialization of a non-class object int a{0}; struct X { operator int(); } x; int b{x}; #endif } namespace dr1758 { // dr1758: 3.7 #if __cplusplus >= 201103L // Explicit conversion in copy/move list initialization struct X { X(); }; struct Y { explicit operator X(); } y; X x{y}; struct A { A() {} A(const A &) {} }; struct B { operator A() { return A(); } } b; A a{b}; #endif }