我有以下类定义:
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;
}
这将返回一个随机值(也不是“创建...”的调试输出)。eg 返回的值x()
显然是“未定义的”。
我刚刚在g++
这里尝试了同样的方法,在那里我得到了预期的结果。这是clang++
我的代码中的问题还是我的错误?
我的 clang 版本:Ubuntu clang 版本 3.0-6ubuntu3(tags/RELEASE_30/final)(基于 LLVM 3.0)。我用-std=c++11 -Wall
.