Const-Correctness-Fehler mit std::get(tuple) in Template
-
Hi,
ich habe hier einen const-correctness-Fehler, hinter den ich einfach nicht steige.
//... template< typename ChannelType > typename detail::custom_sink_by_channel_type<custom_list, ChannelType>::type const& channel() const { // HIER return std::get< detail::custom_sink_by_channel_type<custom_list, ChannelType>::index >(sinks_); } template< typename Ret, typename Interface, typename... FuncArgs, typename... Args > Ret pull(Ret(Interface::*funcPtr)(FuncArgs...) const, Args&&... args) const { return channel<typename Interface::channel>().pull(funcPtr, std::forward<Args>(args)...); } private: tuple_type sinks_;Der Compiler mäkelt in der mit "HIER" markierten Zeile an:
error C2440: 'return': 'const up::ChannelSinkT<ChannelType,>' kann nicht in 'up::ChannelSinkT<ChannelType,> &' konvertiert werden
Gibt es da irgendein Problem, dass ich const nicht so einfach zu dem abhängigen Return-Typ hinzufügen kann? Das ist gerade ein ziemlicher Show-Blocker... Kann mir einfach nicht erklären, was da const-spezifisch inkorrekt ist

-
was ist
detail::custom_sink_by_channel_type<custom_list, ChannelType>::typefür ein typ? sieht eben ganz so aus als wäre es von anfang an eine referenz, so dassconst&keinen effekt hat. in dem fall ->std::remove_referenceund dann manuell einconst&hinzufügen.
-
Genau das war das Problem, danke Dir tausendmal! Ich frage mich, warum ich da eine Referenz hingepackt habe in diesem lookup-Template... Damit hatte ich einfach nicht gerechnet und mein Suchauge war nicht geschult genug um das sofort als Fehlerauslöser in Betracht zu ziehen -.-
Problem gelöst! \o/