http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56428



             Bug #: 56428

           Summary: [C++11] "is not a constant expression" when comparing

                    non-type template argument to nullptr

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Keywords: rejects-valid

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: r...@gcc.gnu.org





struct A { };



template<bool B>

  struct Builder

  {

    static A build() { return A(); }

  };





template<A (*F)()>

  A f()

  {

    return Builder<F != nullptr>::build();

  }



A g();



int main()

{

  f< &g >();            // OK

  f< nullptr >();       // OK

  f< &f<nullptr> >();   // ERROR

}





a.cc: In instantiation of 'A f() [with A (* F)() = f<0u>]':

a.cc:22:20:   required from here

a.cc:13:41: error: '(f<0u> != 0u)' is not a constant expression

     return Builder<F != nullptr>::build();

                                         ^

a.cc:13:41: note: in template argument for type 'bool'

Reply via email to