繁体   English   中英

static_assert无法将const char *模板参数识别为constexpr:g ++错误?

[英]static_assert doesn't recognize a const char* template parameter as constexpr: g++ bug?

请考虑以下定义。

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
}

完整的错误是

../main.cpp:16:3:错误:静态声明的非恒定条件

../main.cpp:16:3:错误:'((((const char *)(&Test :: wrong_string))==(((const char *)(&Test :: right_string)))'不是常数表达

我相信这是一个编译器错误,因为根据我作为模板参数传递的内容(无论Test::right_string还是Test::right_string ), static_assert表达式的constexpr性没有意义。

我已经发现在将地址作为模板参数处理时,g ++ 4.6 有点缺陷 这是同一错误的实例吗?

这是一个g ++错误,至少已在4.7中修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM