'U' bezieht sich nicht auf einen Wert

Ich bin mit coliru.

Befehlszeile:

g++ -std=c++11 -O2 main.cpp && ./a.out
clang++ -std=c++11 -O2 main.cpp && ./a.out

Der folgende code kompiliert fein in g++ aber nicht in clang++.

    template <typename T, typename... U>
    A& operator ()(T a, U... b)
    {
        struct Inner { 
            operator decltype(T(U...)) const {
                return a(b...);
            }
        } inner;

        return *this;
    }

main.cpp:17:37: Fehler: "U" bezieht sich nicht auf einen Wert

            operator decltype(T(U...)) const {

                                ^

main.cpp:13:43: Anmerkung: erklärt hier

    template <typename T, typename... U>

                                      ^

1 Fehler generiert.

Den Fehler bekomme ich jetzt:

main.cpp:18:41: error: reference to local variable 'a' declared in enclosing function 'operator()'

Meine Klasse sieht wie folgt aus:

template <typename R>
class A {
        R value = R();
    public:
        A() { }
        ~A() { }
        template <typename T, typename... U>
        A& operator ()(T a, U... b)
        {
            struct Inner { 
                operator decltype(std::declval<T>()(std::declval<U>()...))() const {
                    //some code here to return a(b...)
                }
            } inner;
            value += inner;
            return *this;
        }

        R val() {
            return value;
        }
};
  • Sie sollten nicht einfach komplett ändern Sie Ihre Frage - das macht es fast nutzlos für Menschen, die mit dem ursprünglichen problem. Wenn Sie zwei Fragen haben, bitten Sie Sie als solche.
  • Sorry, ich war nicht sicher, wie das problem zu beschreiben.
InformationsquelleAutor | 2013-11-05
Schreibe einen Kommentar