Rvalue reference and literal

Consider the code

template <typename... Args> void foo (Args&& ...) { } template <typename... Args> void bar (Args&& ... args) { foo (std::forward (args)...); } int main () { bar (true); } ~ 

gcc 4.7.2 gives an error

 error: no matching function for call to 'forward(bool&)' note: candidates are: template<class _Tp> constexpr _Tp&& std::forward(typename std::remove_reference<_Tp>::type&) note: template argument deduction/substitution failed: note: template<class _Tp> constexpr _Tp&& std::forward(typename std::remove_reference<_Tp>::type&&) note: template argument deduction/substitution failed: 

Why is the letter not output as rvalue?

+4
source share
1 answer

You are not using std::forward() correctly: you need to specify the output type as an argument to std::forward() :

 foo (std::forward<Args>(args)...); 
+7
source

Source: https://habr.com/ru/post/1445157/


All Articles