http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47706
Paolo Carlini <paolo.carlini at oracle dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |INVALID --- Comment #1 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-02-12 01:38:07 UTC --- There is nothing to fix here. I suppose you agree that any comparison involving NaNs is false, thus you first example is ok. The second one invokes undefined behavior, because among the requirements of std::min is that the type T must be LessThanComparable and when you instantiate std::min with a floating point T including NaNs in its domain the '<' isn't irreflexive.