[Bug c++/69060] Invalid 'cannot bind lvalue to rvalue' error
slawomir.karol.domagala at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Jan 4 14:01:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69060
Sławomir <slawomir.karol.domagala at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |slawomir.karol.domagala@gma
| |il.com
--- Comment #1 from Sławomir <slawomir.karol.domagala at gmail dot com> ---
The same with version 4.9.4 20150813 (prerelease)
Error:
CXX diag/bin/fsmf_test/collector_handler.o
src/log_collecting/collector_handler.cpp: In member function ‘void
diag::collector_handler::add_file_to_dl_list(const string&, bool)’:
src/log_collecting/collector_handler.cpp:274:47: error: cannot bind ‘bool’
lvalue to ‘bool&&’
observers_list->notify_observers(uri, is_last);
^
In file included from ../diag/src/log_collecting/diag_object.h:8:0,
from src/log_collecting/collector_handler.h:11,
from src/log_collecting/collector_handler.cpp:13:
../diag/src/log_collecting/observers_container.h:52:15: note: initializing
argument 2 of ‘void
diag::observers_container<callback_args_types>::notify_observers(callback_args_types&&
...) [with callback_args_types = {boost::optional<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >, bool}]’
virtual void notify_observers(callback_args_types&&... args) {
Code:
template <typename... callback_args_types>
class observers_container
{
public:
typedef std::function<void(callback_args_types...)> callback_type;
observers_container() = default;
virtual ~observers_container() = default;
/*!
* Copy constructor
*/
observers_container(const observers_container& o_container) {
observers_list = o_container.observers_list;
}
/*!
* Adds observer
*/
void add(callback_type obs) {
std::lock_guard<std::mutex> lock(list_mtx);
observers_list.push_back(obs);
}
/*!
* Removes observer
*/
void remove(const callback_type& obs_to_unregister) {
std::lock_guard<std::mutex> lock(list_mtx);
observers_list.remove(obs_to_unregister);
}
/*!
* Notifies observers
*/
virtual void notify_observers(callback_args_types&&... args) {
std::lock_guard<std::mutex> lock(list_mtx);
for(auto observer: observers_list) {
observer(std::forward<callback_args_types>(args)...);
}
}
private:
std::list<diag_object_observer_handle> observers_list;
mutable std::mutex list_mtx;
};
More information about the Gcc-bugs
mailing list