mardi 27 novembre 2018

Return lambda from ternary operator

I can return a lambda from ternary operator if both the lambda doesn't capture anything.

 auto lambda1 = 1==1
             ? [] (int a) {std::cout << "First\n";}
             : [] (int a) {std::cout << "Second\n";};

 auto lambda2 = 1==2
             ? [] (int a) {std::cout << "First\n";}
             : [] (int a) {std::cout << "Second\n";};
lambda1(10);
lambda2(10);

This works fine.

But this doesn't

int n = 10;

auto lambda3 = 1==1
             ? [&n] (int a) {std::cout << "First\n";}
             : [&n] (int a) {std::cout << "Second\n";};

 auto lambda4 = 1==2
             ? [&n] (int a) {std::cout << "First\n";}
             : [&n] (int a) {std::cout << "Second\n";};
lambda3(10);
lambda4(10);

The error is main.cpp:20:18: error: operands to ?: have different types 'main()::<lambda(int)>' and 'main()::<lambda(int)>' ? [&n] (int a) {std::cout << "First\n";}

I wonder why capturing the same variable changes the type of lambda?

Aucun commentaire:

Enregistrer un commentaire