Я просмотрел различные варианты, предложенные в качестве вопросов, на которые, по мнению Stackoverflow, уже может быть ответ, но ничего из того, что я видел, не приблизилось.
Образец кода:
#include <math.h>
class v2
{
public:
float x;
float y;
v2(float angle) : x(cos(angle)), y(sin(angle)) {}
v2(const v2 &v) : x(v.x), y(v.y) {}
};
int main(int argc, char **argv)
{
float const angle(1.0f);
v2 const test1(angle);
v2 const test2(v2(angle));
v2 const test3(test1);
float const x1(test1.x);
float const y1(test1.y);
float const x2(test2.x); // These two lines fail, claiming left of .x must have class type.
float const y2(test2.y);
float const x3(test3.x);
float const y3(test3.y);
return 0;
}
Это с MSVC из VS 2010. Создание test2 компилируется правильно, но доступ к его членам завершается ошибкой, утверждая, что test2 не имеет типа класса.
Насколько я вижу, все правильно, конструктор копирования принимает ссылку на константу, поэтому он должен нормально работать с используемым временным.
Так в чем причина ошибки?
v2 const test2((v2(angle)));
для устранения неоднозначности - person Marco A.   schedule 14.09.2015