2010-06-20

const_castで消しされないconst

const_castで消しされないconstが存在する。関数へのポインターにおける関数の型や、メンバー関数へのポインターにおけるメンバー関数の型だ。

void f(int const *) {}

struct C
{
    void f() const {}
} ;

int main()
{
    // これが普通
    void (*ok_1)(int const *) = &f ;

    // ill-formed.
    // 関数の仮引数のconstを消そうとしている
    void (*error_1)(int *) = const_cast<void (*)(int *)>(&f) ;

    // これが普通
    void (C::*ok_2)() const = &C::f ;

    // ill-formd.
    // メンバー関数のconstを消そうとしている
    void (C::*ok_2)() = const_cast<void (C::*ok_2)()>(&C::f) ;
}

こんなconstが消せてたまるか。

No comments:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.