c++ - Does swap() cause undefined behaviour? -
c++ - Does swap() cause undefined behaviour? -
i'm trying understand conditions on std::swap
[c++11: utility.swap]. template defined as
template <typename t> void swap(t &, t &)
(plus noexcept
details) , having effect of "exchanging values stored @ 2 locations".
is next programme have well-defined?
#include <utility> int main() { int m, n; std::swap(m, n); }
if wrote swap code myself (i.e. int tmp = m; m = n; n = tmp;
), have undefined behaviour, since effort lvalue-to-rvalue conversion on uninitialized object. standard std::swap
function not seem come conditions imposed on it, nor can 1 derive specification there lvalue-to-rvalue , ub.
does standard require std::swap
perform magic well-defined on uninitialized objects?
to clarify point, consider function void f(int & n) { n = 25; }
, never has undefined behaviour (since not read n
).
very nice question. however, covered [res.on.arguments]§1:
each of next applies arguments functions defined in c++ standard library, unless explicitly stated otherwise.
if argument function has invalid value (such value outside domain of function or pointer invalid intended use), behavior undefined.to address concern f(n)
, function f
question not part of c++ standard library , above clause not apply it.
c++ c++11 language-lawyer undefined-behavior lvalue-to-rvalue
Comments
Post a Comment