Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot initialize const int from unpacked tuple

Question is really simple, why is this code not working:

#include <tuple>

int main( int argc, char* argv[]) {
    const int a,b = std::tie(std::make_pair(1,2));
    return EXIT_SUCCESS;
}

g++ gives me this error:

./test.cpp: In function ‘int main(int, char**)’: ./test.cpp:4:13: error: uninitialized const ‘a’ [-fpermissive] const int a,b = std::tie(std::make_pair(1,2)); ^ ./test.cpp:4:42:

error: cannot bind non-const lvalue reference of type ‘std::pair&’ to an rvalue of type ‘std::pair’
const int a,b = std::tie(std::make_pair(1,2));

I cannot get any tuple-like return by value, using this kind of pattern (either const or non const). Is it a better way to do what I am trying to achieve here ?

like image 376
Tobbey Avatar asked Dec 04 '25 18:12

Tobbey


1 Answers

const int a,b = std::tie(...)

This isn't doing what you think it is. It's creating two const int variables:

  • a, uninitialized

  • b, initialized to std::tie(...)


The proper way of using std::tie is as follows:

int a, b;
std::tie(a, b) = std::make_pair(1, 2);

Note that you need a and b to be already declared and non-const.


In C++17, you can use structured bindings instead:

const auto [a, b] = std::make_pair(1, 2);
like image 171
Vittorio Romeo Avatar answered Dec 06 '25 08:12

Vittorio Romeo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!