[LLVMbugs] [Bug 13970] New: constexpr function rejected as non const

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Sep 28 01:37:47 PDT 2012


             Bug #: 13970
           Summary: constexpr function rejected as non const
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++11
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: leonid at volnitsky.com
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified

With clang 3.2 from 9/19/2012 trunk clang rejects constexpr function as
non-const.  Curiously, GCC have very similar bug, where constexpr function is
rejected as non-const only in overload resolution (gcc bug 54648)

Artificial example:

#include <type_traits>
#include <vector>
#include <iostream>
using namespace std;

template <typename T>
struct is_range_t {
        template < class U, class I = typename U::const_iterator >
        static int8_t
        test(U* u);

        template <typename U>
        static int16_t

        enum { value  =  sizeof test<T> (0) == 1 };

template<typename T>
constexpr bool
is_range() { return  is_range_t<T>::value; };

// SFINAE f() 
template<class T>
typename std::enable_if< is_range<T>(), bool>::type
f() { return true; }

template<class T>
typename std::enable_if<!is_range<T>(), bool>::type
f() { return false; }

int main () {

        //  here is_range() is constepxr
        static_assert(is_range<vector<int>>(), "is-const-expr test");

        //  here is_range() is constepxr too
        return f<vector<int>>();

        // ERROR clang says that is_range() is not constexpr
        //return f<int>();

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