// RUN: %clang_cc1 -fsyntax-only -verify %s -triple=i686-pc-linux-gnu -std=c++11
usingsize_t=decltype(sizeof(0));structnoreturn_t{}constexpr noreturn ={};void*operator new[[noreturn]](size_t, noreturn_t);void operator delete[[noreturn]](void*, noreturn_t);voidgood_news(){auto p =newint[2][[]];auto q =newint[[]][2];auto r =newint*[[]][2][[]];auto s =new(int(*[[]])[2][[]]);}voidbad_news(int*ip){// attribute-specifiers can go almost anywhere in a new-type-id...
auto r =newint[[]{return1;}()][2];// expected-error {{expected ']'}}
auto s =newint*[[]{return1;}()][2];// expected-error {{expected ']'}}
// ... but not here:
auto t =new(int(*)[[]]);// expected-error {{an attribute list cannot appear here}}
auto u =new(int(*)[[]{return1;}()][2]);// expected-error {{C++11 only allows consecutive left square brackets when introducing an attribute}} \
expected-error {{variably modified type}} \
expected-error {{a lambda expression may not appear inside of a constant expression}}
}voidgood_deletes(){delete[&]{return(int*)0;}();}voidbad_deletes(){// 'delete []' is always array delete, per [expr.delete]p1.
delete []{return(int*)0;}();// expected-error {{'[]' after delete interpreted as 'delete[]'}}
}