违规代码:C++ 11:clang在我的模板定义中拒绝numeric_limits <>,而gcc接受它 - 这是正确的?
template <class Bar,
size_t MAX_SIZE = std::numeric_limits<size_t>::max()>
size_t foo(Bar const& b) { omitted... }
它编译于GCC 4.7.2与-std=c++11
罚款。在铛3.0我得到以下错误:
foo.hpp:35:28: error: non-type template argument of type 'unsigned long' is not an integral constant expression
size_t MAX_SIZE = std::numeric_limits<size_t>::max()>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
至于我可以告诉大家,我应该能够以这种方式在C++ 11使用numeric_limits
。铿锵在这里是错误的,还是我不知道的东西?
编辑:
编译标志是:clang++ -o foo.o -c -W -Wall -Wextra -Werror -std=c++11 -stdlib=libc++ -g -I. foo.cpp
你铿锵使用哪种STDLIB?这不是一个编译器问题,它取决于标准库实现是否在'numeric_limits :: max()'之前放置'constexpr'标识符。另外,3.0还是比较老的,所以如果你使用libC++,那么可能只是太老而不能做出改变。 –
Xeo
2013-02-13 12:38:20
我猜想因为添加'-stdlib = libC++'没有改变,它可能是一个太老的问题? – porgarmingduod 2013-02-13 12:53:59
你在使用std :: size_t还是使用namespace std? – 2013-02-13 12:58:40