[LLVMbugs] [Bug 9908] New: alias templates, something is not quite right

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu May 12 18:43:14 PDT 2011


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

           Summary: alias templates, something is not quite right
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++0x
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: hhinnant at apple.com
                CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com


Apple clang version 3.0 (trunk 131228) (based on LLVM 3.0svn)
Target: x86_64-apple-darwin10.7.0
Thread model: posix

template <class _Tp, class _Up>
struct __allocator_traits_rebind
{
    typedef typename _Tp::template rebind<_Up>::other type;
};

template <class Alloc>
struct allocator_traits
{
    typedef Alloc allocator_type;
    template <class T> using rebind_alloc = typename
__allocator_traits_rebind<allocator_type, T>::type;
    template <class T> using rebind_traits = allocator_traits<rebind_alloc<T>>;
};

template <class T>
struct ReboundA {};

template <class T>
struct A
{
    typedef T value_type;

    template <class U> struct rebind {typedef ReboundA<U> other;};
};


int main()
{
    allocator_traits<A<char> >::rebind_traits<double> a;
}


test.cpp:242:33: error: no member named 'rebind_traits' in
'allocator_traits<A<char> >'
    allocator_traits<A<char> >::rebind_traits<double> a;
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
test.cpp:242:53: error: expected '(' for function-style cast or type
construction
    allocator_traits<A<char> >::rebind_traits<double> a;
                                              ~~~~~~^
test.cpp:242:55: error: use of undeclared identifier 'a'
    allocator_traits<A<char> >::rebind_traits<double> a;
                                                      ^
3 errors generated.

Expecting no error.

And the wild thing is the workaround:  Use the template parameter Alloc
directly, instead of the type allocator_type, in the definition of
rebind_alloc, and then rebind_traits behaves correctly.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list