2014-09-01 374 views
0

我知道g ++支持constexpr數學函數。我想在鏗鏘聲++上做到這一點。所以我寫了一個簡單的代碼。Clang ++是否支持libC++支持constexpr數學函數

#include<iostream> 
#include<cmath> 

int main() 
{ 
    constexpr auto a(std::floor(4.3)); 
    std::cout<<a<<std::endl; 
} 

然後用鏗鏘++ - ++的libc -std = C++ 1Y編譯它並收到以下錯誤:

error: constexpr variable 'a' must be initialized by a constant expression 
constexpr auto a(std::floor(4.3)); 
      ^~~~~~~~~~~~~~~~ 
note: non-constexpr function 'floor' cannot be used in a constant expression 
constexpr auto a(std::floor(4.3)); 
      ^
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:184:14: note: declared here 
__MATHCALLX (floor,, (_Mdouble_ __x), (__const__)); 
      ^
/usr/include/math.h:58:26: note: expanded from macro '__MATHCALLX' 
__MATHDECLX (_Mdouble_,function,suffix, args, attrib) 
        ^
/usr/include/math.h:60:22: note: expanded from macro '__MATHDECLX' 
__MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \ 
       ^
/usr/include/math.h:63:31: note: expanded from macro '__MATHDECL_1' 
extern type __MATH_PRECNAME(function,suffix) args __THROW 
          ^
/usr/include/math.h:66:42: note: expanded from macro '__MATH_PRECNAME' 
#define __MATH_PRECNAME(name,r) __CONCAT(name,r) 
             ^
/usr/include/x86_64-linux-gnu/sys/cdefs.h:88:23: note: expanded from macro '__CONCAT' 
#define __CONCAT(x,y) x ## y 

我用鏗鏘-3.5。所以我想問一下,clang ++是否支持constexpr數學函數。如果是這樣,我需要傳遞給clang哪個編譯器標誌?

回答

0

cppreference未聲明std::floorconstexpr。不確定是否有任何標準。我猜編譯器可能想要避免實現這個,除非它在某種標準中,以避免不兼容的行爲。根據the manual,clang旨在支持C++ 11和C++ 1y(可能是C++ 14),並沒有提及C++特性的擴展。