가변 인수 템플릿 인수가있는 std::forward
사용법의 두 가지 변형이 있습니다.std :: forward <Args> 또는 std :: forward <Args...>?
template <typename... Args>
void foo(Args&&... arga)
{
bar(std::forward<Args>(args)...); // variant 1
bar(std::forward<Args...>(args)...); // variant 2
// EDIT the above is a fixed version, the initial incorrect version was
// bar(std::forward<Args>(args...)); // variant 1
// bar(std::forward<Args...>(args...)); // variant 2
}
g ++과 clang의 두 변종을 모두 사용해 보았으며, 둘 다 똑같이 잘 작동하는 것처럼 보입니다. -Wall -Wextra -Wpedantic
으로 경고가 생성되지 않았습니다.
두 변종이 모두 정확합니까? 그렇지 않다면 왜 안 되겠습니까? 표준이 그것에 대해 무엇을 말해야합니까?
업데이트 된 질문이 많이 변경되지 않아도 변형 2는 두 개 이상의 매개 변수와 함께 작동하지 않습니다. 실제로 코드를 어떻게 테스트 했습니까? 실제로 작동하는지 여부를 확인하려면 [매개 변수의 모든 관련 조합으로 인스턴스화] (http://coliru.stacked-crooked.com/a/a2695d46af54ce26)해야합니다. –
@DanielFrey 분명히 적절하게 테스트되지 않았습니다. –