1. ホーム
  2. c++

[解決済み] 同じコードでもCodeBlockSとVisual Studioでは反応が違う

2022-03-01 01:20:40

質問

このコードをCodeBlocks(C++14使用)およびVisual Studio 2015でテストしてみました。

#include <iostream>

void sum(auto a, auto b)
{
std::cout << a + b;
}

int main()
{
sum(11, 5);
}

codeblocksでは、正常にコンパイルされ、16が出力されます。 Visual Studioでは、次のようなエラーが発生します。

  Error C3533   a parameter cannot have a type that contains 'auto'

同じ言語なのに、なぜコンパイラの反応が違うのか、知りたかったのです。また、Visual Studioではタブを開いたままにするのにstd::cin.get()が必要ですが、Codeblocksではタブが勝手に閉じないのはなぜですか?

解決方法は?

ビジュアルスタジオとコードブロックの本当の違いは、ビジュアルスタジオは独自のvc++コンパイラを使用し、コードブロックはgccのWindowsへの移植であるmingw gccを使用していることです。

パラメータを auto は、関数を 汎用関数 これは、以前から提案されていたことですが、まだ標準化されていません。標準では、関数のパラメータとして auto を使うことは、ラムダ関数 (c++14, generic lambdas) でのみ許可されています。

しかし、gccでは、このサポートが追加されるのは時間の問題と考え、拡張機能として実装しています。Vc++は今のところこれを行なっていない。うまくいけば、c++20でこの機能を見ることができるかもしれません。

汎用関数は、基本的に、より冗長でない構文による関数テンプレートの略記法です。