[LLVMbugs] [Bug 22605] New: Move template parameter defaults to forward declarations

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Feb 16 11:32:48 PST 2015


http://llvm.org/bugs/show_bug.cgi?id=22605

            Bug ID: 22605
           Summary: Move template parameter defaults to forward
                    declarations
           Product: libc++
           Version: unspecified
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P
         Component: All Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: eniebler at boost.org
                CC: llvmbugs at cs.uiuc.edu, mclow.lists at gmail.com
    Classification: Unclassified

There are lots of places in libc++ where a class template is forward declared
without defaults for template parameters, only to have the defaults specified
later on the definition. An example is in <list> which first has this:

template <class _Tp, class _Alloc> class _LIBCPP_TYPE_VIS_ONLY list;

to be followed later with this:

template <class _Tp, class _Alloc = allocator<_Tp> >
class _LIBCPP_TYPE_VIS_ONLY list
    : private __list_imp<_Tp, _Alloc>

This actually makes a difference to clang when std::list is passed as a
template template parameter. See <http://llvm.org/bugs/show_bug.cgi?id=22601>,
which was discovered when porting real-world code from libstdc++ to libc++.

If the default parameter is moved to the forward declaration, the problem goes
away. In other words, this is preferred:

template <class _Tp, class _Alloc = allocator<_Tp> >
class _LIBCPP_TYPE_VIS_ONLY list;

template <class _Tp, class _Alloc /* = allocator<_Tp>*/ >
class _LIBCPP_TYPE_VIS_ONLY list
    : private __list_imp<_Tp, _Alloc>

In my own code, I achieve this with one internal header with nothing but
forward declarations. All defaults are specified there. All other headers
include this header first.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150216/aebb42fa/attachment.html>


More information about the llvm-bugs mailing list