diesen Code vor:make_tuple mit Template-Parameter lässt sich nicht kompilieren
#include <tuple>
int main()
{
int i;
long k;
auto tup1 = std::make_tuple<long>(i); // Compiles
auto tup2 = std::make_tuple<int>(k); // Compiles
auto tup3 = std::make_tuple<int>(i); // Does not compile
auto tup4 = std::make_tuple<int>(i+0); // Compiles
auto tup5 = std::make_tuple(i); // Compiles
}
Warum auto tup3 = ...
nicht kompilieren? Offensichtlich will make_tuple<int>(...)
eine Rvalue-Referenz als sein Argument; aber warum?
(Ich bin mit GCC 6.1.0.)
Sie sollen nicht Vorlagentyp Argumente in 'make_tuple' angeben, da sonst Sie Typen erzwingen, die nicht auf die Argumente binden kann –
Als Wie oben erwähnt, sollten Sie keine Template-Typ-Argumente angeben. Wenn Sie einen rvalue erstellen möchten, verwenden Sie einfach std :: move. Dies würde kompilieren: auto tup3 = std :: make_tuple (Std :: move (i)); –
Pani