次のクラス定義があります。
template<typename T>
class Point {
private:
T px, py;
public:
Point(T x, T y): px(x), py(y) {
std::cout << "created " << x << ":" << y <<std::endl;
};
T x() const { return px; };
T y() const { return py; };
};
そこから専門分野を導き出しています。
class PointScreen: public Point<int> {
using Point::Point;
};
これを でコンパイルするとclang++
、警告/エラーは発生しませんが、コンストラクターは呼び出されません。
#include <iostream>
// definitions from above
int main() {
std::cout << PointScreen(100, 100).x() << std::endl;
return 0;
}
これはランダムな値を返します (また、デバッグ出力 "created..." ではありません)。eg によって返される値x()
は明らかに「未定義」です。
g++
hereで同じことを試したところ、期待される結果が得られました。これは問題clang++
ですか、それとも私のコードにバグがありますか?
私のclangバージョン: Ubuntu clang version 3.0-6ubuntu3 (tags/RELEASE_30/final) (LLVM 3.0ベース)。でコンパイルし-std=c++11 -Wall
ます。