C++と色々

主にC++やプログラムに関する記事を投稿します。

Visual C++

Visual C++で標準ヘッダや外部ヘッダを警告や診断の対象外とする方法

はじめに コードを書くとき様々な理由*1でコンパイラの警告レベルをできるだけ強くするべきです。コンパイラの警告だけではなく診断ツール類*2を使っている場合それらもできる限り厳しい設定にしておきたいです。 そんなときに困るのが、インクルードした標…

Visual C++の __cplusplus について

Visual C++の '__cplusplus' はコンパイラのC++の言語標準によらず 199711L を返します。 その理由について以下の投稿に書かれていました。 developercommunity.visualstudio.com It is roughly intentional that we don’t change the value of __cplusplus …

Visual C++でIntellisenseの警告を抑止する方法

結論 #pragma warning(push, 0) でコンパイラの警告を抑止し、 #pragma warning(disable: ALL_CODE_ANALYSIS_WARNINGS でインテリセンスの警告を抑止できる。 #pragma warning(push, 0) #include <CodeAnalysis/Warnings.h> #pragma warning(disable: ALL_CODE_ANALYSIS_WARNINGS) #in</codeanalysis/warnings.h>…

Visual C++ 15.6 で並列 for_each

Visual Studio 2017の15.6からC++17から入るParallel Algorithmsが部分的に実装されました。 以下の並列for_eachコードが動きようになります。 #include <algorithm> #include <execution> #include <iostream> #include <vector> int main() { // サイズ10のvectorを作って0, 1, 2, ..., 9で埋める s</vector></iostream></execution></algorithm>…

Visual Studio 2017と Bash on Windows を使ってC++に提案中のコンセプトを試す

この記事の内容はVisual C++公式ブログと同様になります。 Learn C++ Concepts with Visual Studio and the WSL | Visual C++ Team Blog 基本はVisual C++公式ブログ通りに行えばよいのですが、VS上でのremote buildの方法が別の記事になっていたり、bash側…

Visual Studio 2017でファイルのエンコードを指定して保存する方法

Visual Studio 2015までは ファイル(F) -> 保存オプションの詳細設定(V) という項目で現在のファイルのエンコーディングを指定して保存できました(画像はVisual Studio 2015)。 ところが、Visual Studio 2017では保存オプションの詳細設定が削除されました。…

出力するスタティックライブラリのファイル名、ディレクトリを変える

d.hatena.ne.jp

Visual C++ 2015 Update 1でC++にmoduleが試験的に実装された

要約 12月1日のUpdate1でVisual C++にmoduleが試験的に実装されました channel9.msdn.com このmoduleの文法はおおよそ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4214.pdf と近いものになっています。 moduleとは javaのpackage/importや、…

Visual C++でNuGetで簡単にboostインストール

注意 Visual Studio 2015 RCで動作を確認しました。他のVSでは確認していません。 Visual C++プロジェクトで右クリックをして、「NuGetパッケージの管理」をクリックします。 検索フォームにboostと入力します。少し待つと検索結果が出てくるので、画面右に…

Visual C++ 2013のis_trivially_destructibleがバグっている

以下のコードがコンパイル通りません #include <type_traits> struct no { ~no() {} }; static_assert(!std::is_trivially_destructible<no[1]>::value, ""); int main() {} ちなみにVS2015PRでは直っていました</no[1]></type_traits>

Visual C++ 2015 PreviewのC++11/14/1zの新機能

Visual C++ 12.0 CTPと比べて新しく対応したC++11/14/1zの新規の機能を紹介します。 コア言語 Terse range-based for 訳すなら簡便な範囲for文、って感じでしょうか? C++14の次の規格で提案されている機能で、正式に入ることは決定していませんが、ほぼ入る…

VC++2015PRでURIエンコード

Visual C++ 2015でC++1zで提案されているTerse range-based for loopsと、C++11のUnicodeリテラルが入ったので使ってみました。 #include <algorithm> #include <iomanip> #include <sstream> #include <string> namespace { std::string const unreserved_chars = "abcdefghijklmnopqrstuvwxyzABC</string></sstream></iomanip></algorithm>…

Visual C++ 2013 CTPのオーバーロード解決がバグっている

これで3~4時間詰まった… 以下のコードがコンパイルエラーになる #include <initializer_list> void f(int) {} void f(std::initializer_list<int>) {} int main() { f({10}); } /* 1> prog.cpp 1>prog.cpp(7): error C2668: 'f' : ambiguous call to overloaded function 1> prog.c</int></initializer_list>…

Visual C++ Complier Nov 2013 CTPのconstexprのコンパイル時再帰深度

Visual C++ Complier Nov 2013 CTPにて部分的に実装されたconstexprですが、constexpr関数のコンパイル時再帰深度について調べてみました。 constexpr int func(int n) { return n == 0 ? 0 : func(n - 1); } int main() { static_assert(func(512) == 0, ""…

Visual C++ Compiler November 2013 CTPがやってきた!

ソース http://blogs.msdn.com/b/vcblog/archive/2013/11/18/announcing-the-visual-c-compiler-november-2013-ctp.aspx ついに…!ついに…!きた…!Visual C++ 2013 CTPです! なんと、Visual C++で、constexprが使えます!!!(コンストラクタ除く) コンパ…

Visual Studio 2013 RCが出た

Visual Studio 2013 RCがリリースされました。 C++が好きな自分としてはPreviewから更に新しく追加されたC++11/14の機能が気になります。(自分はC99については分からないので触れていません) さっそくPremium版をインストールして遊んでみました。 #include <type_traits></type_traits>…

Google TestをVisual C++ 11でビルドする

解凍したフォルダにmsvcというフォルダがあり、その中にVisual Studio 2008の.slnファイルがあるのでそれを2012に変換してビルドすればいいのですが、そのままビルドしようとするとstd::tuple辺りでエラーが出ます。これはVC++のSTLがまだC++11の可変長テン…

VC++2010がLNK1123

VC++2010のプロジェクトがLNK1123エラーでビルドできなかった。調べたら原因はVS2012をインストールしたことらしい。 ググったらVC++2010のヴァージョンをSP1というものにアップグレードすれば動くらしい。アップグレードしたら動いた。 参考VS2010でLNK1123…

VS2012

VS2012を導入したので(あと2012.11版のVC++)、VS2012で追加された新しいC++11の機能を試してみた。機能を試すことが目的なのでソースの意味や綺麗さは皆無です… #include <vector> #include <iostream> //新しいSTL #include <atomic> #include <chrono> #include <condition_variable> #include <filesystem> #include <future> #includ</future></filesystem></condition_variable></chrono></atomic></iostream></vector>…