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>::type für ein typ? sieht eben ganz so aus als wäre es von anfang an eine referenz, so dass const& keinen effekt hat. in dem fall -> std::remove_reference und dann manuell ein const& 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/


Anmelden zum Antworten