[LLVMbugs] [Bug 11983] New: is_polymorphic does not work with classes/structs declared final

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sat Feb 11 07:01:54 PST 2012


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

             Bug #: 11983
           Summary: is_polymorphic does not work with classes/structs
                    declared final
           Product: libc++
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: All Bugs
        AssignedTo: hhinnant at apple.com
        ReportedBy: jonathan.sauer at gmx.de
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Created attachment 8041
  --> http://llvm.org/bugs/attachment.cgi?id=8041
svn diff of the patch

The following program does not compile with clang r150076 and libc++ r150085:

#include <type_traits>

struct Final final { };

static_assert(!std::is_polymorphic<Final>::value, "");


This results in:

$ $ ~/LLVM/build/Release+Asserts/bin/clang++ -std=c++0x -stdlib=libc++
clang.cpp 
In file included from clang.cpp:1:
/usr/include/c++/v1/type_traits:774:56: error: base 'Final' is marked 'final'
template <class _Tp> struct __is_polymorphic1 : public _Tp {};
                                                       ^
/usr/include/c++/v1/type_traits:779:38: note: in instantiation of template
class
      'std::__1::__is_polymorphic1<Final>' requested here
    : public integral_constant<bool, sizeof(__is_polymorphic1<_Tp>) == ...
                                     ^
/usr/include/c++/v1/type_traits:784:14: note: in instantiation of template
class
      'std::__1::__libcpp_polymorphic<Final, true>' requested here
    : public __libcpp_polymorphic<_Tp> {};
             ^
clang.cpp:5:21: note: in instantiation of template class
'std::__1::is_polymorphic<Final>' requested
      here
static_assert(!std::is_polymorphic<Final>::value, "");
                    ^
clang.cpp:3:8: note: 'Final' declared here
struct Final final { };
       ^
clang.cpp:5:53: error: expected unqualified-id
static_assert(!std::is_polymorphic<Final>::value, "");
                                                    ^
2 errors generated.


This is similar to Bug 11459, where is_empty did not work with final
classes/structs.

The attached patch fixes this bug by using __is_polymorphic if available.

-- 
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