はC++ 14C++初期化子リストおよびデフォルト値
using namespace std;
struct Point
{
int x = 0;
int y = 0;
};
Point p2 {1, 1};
それが打ち鳴らす++ 7.0と罰金コンパイル、それは私が渡し--std = Cの両方のケースではG ++ 4.9では動作しませんと、このコードは有効です++ 1yをコンパイラに渡します。
G ++では、構造体定義からデフォルト値を削除すると動作します。
g++ test_constexpr_ctor.cc --std=c++1y -o test
test_constexpr_ctor.cc:7:15: error: no matching function for call to ‘Point::Point(<brace-enclosed initializer list>)’
Point p2 {1, 1};
^
test_constexpr_ctor.cc:7:15: note: candidates are:
test_constexpr_ctor.cc:1:8: note: constexpr Point::Point()
struct Point
^
test_constexpr_ctor.cc:1:8: note: candidate expects 0 arguments, 2 provided
test_constexpr_ctor.cc:1:8: note: constexpr Point::Point(const Point&)
test_constexpr_ctor.cc:1:8: note: candidate expects 1 argument, 2 provided
test_constexpr_ctor.cc:1:8: note: constexpr Point::Point(Point&&)
test_constexpr_ctor.cc:1:8: note: candidate expects 1 argument, 2 provided
おそらくgcc 4.9バグです。 – 101010
古いg ++のバグです。それを新しいバージョンに更新すると、正常にコンパイルされます。 –
@VictorPolevoyどのG ++バージョンをテストしましたか? –