https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92413

            Bug ID: 92413
           Summary: [temp.explicit] Explicit template instantiations
                    should not define member functions that are not
                    defined at the point of instantiation
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: i at maskray dot me
  Target Milestone: ---

https://wg21.cmeerw.net/cwg/issue546

Change 17.8.2 [temp.explicit] paragraph 8 as follows:

An explicit instantiation definition that names a class template specialization
explicitly instantiates the class template specialization and is only an
explicit instantiation definition of members <del>whose definition is
visible></del><strong>that have been defined</strong> at the point of
instantiation.


template <class T> struct C {void foo();};
template struct C<int>;
template <class T> void C<T>::foo() {}


GCC<4.9 does not define C<int>::foo(), while GCC>=4.9 defines C<int>::foo()

I am not sure whether this example is non-conforming, but -Wall -Wextra
-pedantic gives no diagnostic. (clang 3.0~trunk does not define C<int>::foo().
You may read the discussions at https://bugs.llvm.org/show_bug.cgi?id=43937)

Reply via email to