2010-06-20

疑似デストラクター呼び出しの文面がひどい

5.2.4 Pseudo destructor call [expr.pseudo] paragraph 2

The left-hand side of the dot operator shall be of scalar type. The left-hand side of the arrow operator shall be of pointer to scalar type. This scalar type is the object type.

ハァ? 何度読み返しても文章の意味が分からない。仕方がないので調べたところ、Active Issue 555が見つかった。

C++ Standard Core Language Active Issues 555

なるほど、おそらく、shallは、「でなければならない」ではなく、「である場合」程度の意味なのだろう。ということは、この文面は、こんな意味ではなかろうか

「operator .の左辺がscalar typeである場合、operator ->の左辺がscalar typeである場合、そのscalar typeをobject typeとする。」

どういう意味かというと、以下のようなコードで、

template < typename T >
void f()
{
    T x ;
    x.~T() ;
}

もし、template parameter Tがscalar typeだった場合(例えばint型とか)でも、擬似デストラクター呼び出しができるということを規定しているのだろう。

恐ろしく分かりにくい。また、Avtive issueでは、さらにひどい問題を提起している。しかし、こんなのはFCD前に直しておくべきことだと思うのだが。

追記:どうも、shallには、plan to, intend to, or expect toという意味があるようだ。それを考えると、仮定として使うのも、ありえるのか。のか?

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.