constant-expression-cxx11.cpp revision 4f87062cb411d5a31cf39f1ac576bba4123930f2
1b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenektemplate<typename T> constexpr T id(const T &t) { return t; } 477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct MemberZero { 677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek constexpr int zero() { return 0; } 777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}; 877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremeneknamespace TemplateArgumentConversion { 10b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek template<int n> struct IntParam {}; 1141573ebf8fb971f40fa8a3e20648362c359b4916Ted Kremenek 12b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek using IntParam0 = IntParam<0>; 1377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek // FIXME: This should be accepted once we do constexpr function invocation. 1477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek using IntParam0 = IntParam<id(0)>; // expected-error {{not an integral constant expression}} 1577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek using IntParam0 = IntParam<MemberZero().zero>; // expected-error {{did you mean to call it with no arguments?}} expected-error {{not an integral constant expression}} 16d065d6080f0620bb80b933f3f5d52d37bb2ea770Ted Kremenek} 17d065d6080f0620bb80b933f3f5d52d37bb2ea770Ted Kremenek 18d065d6080f0620bb80b933f3f5d52d37bb2ea770Ted Kremeneknamespace CaseStatements { 191309f9a3b225ea846e5822691c39a77423125505Ted Kremenek void f(int n) { 201309f9a3b225ea846e5822691c39a77423125505Ted Kremenek switch (n) { 211309f9a3b225ea846e5822691c39a77423125505Ted Kremenek // FIXME: Produce the 'add ()' fixit for this. 221309f9a3b225ea846e5822691c39a77423125505Ted Kremenek case MemberZero().zero: // desired-error {{did you mean to call it with no arguments?}} expected-error {{not an integer constant expression}} 231309f9a3b225ea846e5822691c39a77423125505Ted Kremenek // FIXME: This should be accepted once we do constexpr function invocation. 246b67630d5df195f4fe0e4273061c016901d69681Ted Kremenek case id(1): // expected-error {{not an integer constant expression}} 25c0c3f5dbc9e78aa53a86c7d5e3eeda23ddad93d6Ted Kremenek return; 26f494b579b22f9950f5af021f0bf9879a91bb8b41Steve Naroff } 27bb141217871e93767aa3f2de1b9946fa6d37066aZhongxing Xu } 2877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek} 291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump