____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ | |r┬-| | MSVC曰く、「decltypeはoperator」 \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // だっておwwwwwwwwwwwwwwwwwww | :::::::::::(⌒) | | | / ゝ :::::::::::/ type specifierにきまってるおwwwwwwwwwwwwwww | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / バ | | l||l 从人 l||l l||l 从人 l||l バ ン ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ン ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
Expressions with Unary Operators
decltype Operator
うーむ? MSVC的には、decltypeはoperatorなのか。type specifierだろうに。
やばい、本当にoperatorだと信じているようだ。type specifierの項目には載っていない。そもそも、namesじゃなくてspecifiersであるべきなのだが、なんだこのドキュメントは。
しかし、もし本当にdecltypeがoperatorだとするならば、expressionである。とするならば、
decltype( decltype(0) ) ;
このコードはコンパイルが通るはずである。なぜならば、decltypeは、decltype(expression)という文法だからだ。decltypeは、type specifierを取ることはできない。したがって、decltype(int)というのは、ill-formedであるように、decltypeの中にdecltypeを記述することはできない。しかし、もし本当に、MSVCがdecltypeをoperatorだと考えているならば、できるはずである。
果たしてVC10Beta2では、通らなかった。しかも、
error C3553: decltype expects an expression not a type
というエラーメッセージまで出すではないか。decltypeはexpressionではないのだから、これは規格準拠で当然だ。しかし、このドキュメントはなんだろう。
まともに規格通りのドキュメントが書けないから、コンパイラもマヌケな事になってるんじゃないか。
それはそうと、VS2010のRC版が、明後日あたりに公開されるらしい。
No comments:
Post a Comment