samedi 25 mars 2017

Assign a lambda function to static member variable (c++)

I have a template class with a static member variable that I want to be a lambda function. Why doesn't it work?

#include <iostream>
using namespace std;

template <typename T>
class Test {
public:
    static constexpr auto lambda = [](T val) -> T {
        return val;
    };
};

int main() {
    cout << Test<int>::lambda(123) << endl;
}

I tried both version with constexpr and const.

In the first case I get:

../src/test.cpp:8:24: error: ‘constexpr const Test<int>::<lambda(int)> Test<int>::lambda’, declared using local type ‘const Test<int>::<lambda(int)>’, is used but never defined [-fpermissive]
  static constexpr auto lambda = [](T val) -> T {
                        ^~~~~~

In the second case:

../src/test.cpp:7:20: error: ‘constexpr’ needed for in-class initialization of static data member ‘const Test<int>::<lambda(int)> Test<int>::lambda’ of non-integral type [-fpermissive]
  static const auto lambda = [](T val) -> T {
                    ^~~~~~
../src/test.cpp:7:20: error: ‘const Test<int>::<lambda(int)> Test<int>::lambda’, declared using local type ‘const Test<int>::<lambda(int)>’, is used but never defined [-fpermissive]

Aucun commentaire:

Enregistrer un commentaire