2014-02-10 2 views
3

업데이트 : 내 잘못 인 것 같습니다. 올바르게 CTP를 설치하지 않았습니다. MS는 버그를 재현하지 못했습니다.상속 된 생성자 (사용) 및 이동

나는 보통

, 내가 const를 &으로 인수를 전달할 것입니다 (이 그들 사이에 여러 클래스가 있습니다),하지만 난에 노력하고있어 내 기본 클래스에 파생 클래스에서 변수를 이동하려는

값으로 전달하고 계층 구조 아래로 이동하여 복사본을 피하십시오. = 연산으로 aswell,

e:\project\test\main.cpp(25) : error C2664: 'derived::derived(const derived &)': cannot convert argument 1 from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const derived &' 
     Reason: cannot convert from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const derived' 
     No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 

가 나는 또한 기지로 이동 생성자를 추가하는 시도 :

#include <string> 

class base { 
public: 
    explicit base(std::string url) : url_{std::move(url)} {} 
    // prevent copy 
    base(const base&) = delete; 
    base& operator=(const base&) = delete; 
    virtual ~base() {} 

protected: 
    std::string url_; 
}; 

class derived : public base { 
public: 
    using base::base; 
}; 

class derived_final : public derived { 
public: 
    using derived::derived; 
    explicit derived_final(std::string url) : 
     derived{std::move(url)} 
    { 
     // do some stuff 
    } 
}; 


int main() { 
    derived_final df { "test" }; 
} 

및 로그 : 여기

내 클래스입니다.

그러나 derived_final은 derived_final의 생성자에서 파생 된 URL을 이동하려고하면 매개 변수로 std :: string을 사용하여 파생 된 복사 생성자를 사용하려고 시도합니다.

왜 이런 생각입니까? CTP에 msvc 2013을 사용하고 있습니다 ("지원"사용). 여기

소스 : https://bitbucket.org/syl/c-11-inherited-constructor-and-move/src

+1

'main()'도 포함 할 수 있습니까? 나는 uniform-init'derived_final df { "test"}; 때문에 잘못된 카피 - ctor 메시지를 보내지 않았기 때문에 물어 본다. 그리고 내가 왜 그 args에 대한 rval-refs를 사용하지 않는지 완전히 명확하지 않습니다. – WhozCraig

+1

'derived :: derived;를 사용하여'explicit derived_final (std :: string url)'을 정의하는 것뿐만 아니라'derived_final'에서 2 개의 ctors를 똑같은 서명으로 만들지는 않습니다. ? 아직이 기능을 사용하지 않았습니다 – David

+0

게시물을 전체 목록과 오류 메시지로 업데이트했습니다. "explicit"을 제거하려고 시도했지만 여전히 동일한 오류가 발생합니다. @WhozCraig 또한 rvalue 생성자를 추가하려고 시도했지만 여전히 동일한 오류가 발생했습니다. 여전히 VS2013에 (const 파생 된 &) – Syl

답변

0

는 MSVC 버그 것 같다. GCC는 오류를보고하지 않습니다.

+0

처럼 보입니다. 감사. – Syl

+0

내가 11 월에 설치 한 CTP : http://www.reddit.com/r/cpp/comments/1xhjwo/new_c_student_using_visual_studio_express_2012/cfbogip?context=3 – Syl

+0

우리는 'MSCV bug'로 돌아 왔습니다. :) –