Uploaded image for project: 'C++ Standard Library'
  1. C++ Standard Library
  2. STDCXX-301

[XLC++ 8.0] bogus error 1540-0062 explicitly instantiating class template before definition

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • External
    • None
    • IBM XLC++ 8.0

    Description

      PMR 02310,K78,000

      The well-formed program below fails to compile with XLC++ 8.0 on AIX (I haven't checked Linux). It compiles successfully with XLC++ 7.0.

      $ cat t.cpp && xlC -qversion && xlC -c t.cpp

      template <class>
      struct A {
      static int foo ();
      static int bar (int);
      };

      template <class, class> class B;

      template <class T, class U>
      struct C {
      int operator*()

      { return U::bar (b->baz ()); }

      B<T, U> *b;
      };

      template <class, class U>
      struct D {
      void barf (U);
      };

      template struct D<int, C<int, A<int> > >;

      template <class, class U>
      struct B {
      int baz ();

      virtual int foobar (int i = U::foo ())

      { return i; }

      };

      template <class T, class U>
      void D<T, U>::barf (U u)
      {
      *u;
      }
      IBM XL C/C++ Enterprise Edition V8.0 for AIX
      Version: 08.00.0000.0010
      "t.cpp", line 28.33: 1540-0062 (S) The incomplete class "U" must not be used as a qualifier.
      "t.cpp", line 12.39: 1540-0700 (I) The previous message was produced while processing "struct B<int,A<int> >".

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              sebor Martin Sebor
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated: