Lor*_*one 8 c++ templates static-assert constexpr c++11
考虑以下定义.
char right_string[]="::right_one.";
char wrong_string[]="::wrong_one.";
template<const char* str>
void f(){
static_assert(str==::right_string, "Pass me ::right_string!");
}
struct Test{
static constexpr char right_string[]="template_struct::right_one";
static constexpr char wrong_string[]="template_struct::wrong_one";
template<const char* str>
static void f(){
static_assert(str==right_string, "Pass me template_struct::right_string!");
}
};
int main(){
f< ::right_string>(); //compiles, as expected
f< ::wrong_string>(); //does not compile, as expected
Test::f<Test::right_string>(); //compiles, as expected
Test::f<Test::wrong_string>(); //error in Test::f: non-constant condition for static assertion
}
Run Code Online (Sandbox Code Playgroud)
完整的错误是
../main.cpp:16:3:错误:静态断言的非常量条件
../main.cpp:16:3:错误:'(((const char*)(&Test :: wrong_string))==((const char*)(&Test :: right_string)))'不是不断表达
我认为,这是一个编译器错误,因为它没有了意义constexpr表达的内内斯static_assert按我通过作为模板参数(是否修改Test::right_string或Test::right_string).
我已经发现g ++ 4.6 在处理地址作为模板参数时有些缺陷.这是同一个bug的实例吗?
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |