スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Visual Studio 2015でconstexpr delegating constructorが通らない

初めに

Update 1でfixされました。やったね。

みなさまナマステ。ええっとまあタイトルのとおりです。
delegating constructorもconstexprもC++11の機能ですが(C++14のconstexpr関数の制限緩和は今回関係ない)
constexprコンストラクタから他のconstexprコンストラクタを呼ぶとエラーになります。
どういうことかコードを見ましょう。

問題のコード

DxGraphicHandle.cpp

struct YPbPr {//ITU-R BT.709 cf.)http://koujinz.cocolog-nifty.com/blog/2009/03/rgbycbcr-a4a5.html
	YPbPr() = default;
	constexpr YPbPr(uint8_t i_y, uint8_t i_pb, uint8_t i_pr) : y(i_y), pb(i_pb), pr(i_pr) {}
	explicit constexpr YPbPr(uint8_t i_y) : YPbPr(i_y, 0, 0){}//C++11:delegating constructor
	uint8_t y, pb, pr;
};
dxgraphichandle.cpp(213): error C3249: 'constexpr' 関数のステートメントまはたサブ式が誤っています。
dxgraphichandle.cpp(213): error C2476: コンストラクター 'constexpr' はすべてのメンバーを初期化できません。
dxgraphichandle.cpp(214): note: 'detail::YPbPr::y' はコンストラクターによって初期化されませんでした
dxgraphichandle.cpp(214): note: 'detail::YPbPr::pb' はコンストラクターによって初期化されませんでした
dxgraphichandle.cpp(214): note: 'detail::YPbPr::pr' はコンストラクターによって初期化されませんでした

あ、detail名前空間に書いてます。
で調べてみるとかつてgcc4.7.0でも同じようなことがあったようです。
Bug 51526 - [C++11][constexpr] constexpr delegating constructor should be accepted

結論

VSのバグじゃね?どうやってバグ報告投げるんだろ。

解決策

今回はdelegating constructor使わなくても書けるので使わなければ問題無いです。

struct YPbPr {//ITU-R BT.709 cf.)http://koujinz.cocolog-nifty.com/blog/2009/03/rgbycbcr-a4a5.html
	YPbPr() = default;
	constexpr YPbPr(uint8_t i_y, uint8_t i_pb, uint8_t i_pr) : y(i_y), pb(i_pb), pr(i_pr) {}
	explicit constexpr YPbPr(uint8_t i_y) : y(i_y), pb(0), pr(0) {}
	uint8_t y, pb, pr;
};

その後

どうもすでにMSにバグ報告が何件かいっているようなんですが

MSはfixしたと言っています。つまり次のバージョン(Visual Studio 2015 Update1??)では治っているということ?現時点では打つ手なし?

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

検索フォーム
デジタル・コルクマ3
コルクマワールド
東京 での時間:
更新履歴


総記事数:
Calendar 1.1
<
>
- - - - - - -
- - 1 2 3 45
6 7 8 9 10 1112
13 14 15 16 17 1819
20 21 22 23 24 2526
27 28 29 30 - - -

全記事

Designed by 石津 花

最新記事
カテゴリ
最新コメント
最新トラックバック
月別アーカイブ
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
プロフィール

yumetodo

Author:yumetodo
FC2ブログへようこそ!

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。