diff options
Diffstat (limited to 'libstdc++-v3/include/std/istream')
-rw-r--r-- | libstdc++-v3/include/std/istream | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream index ea34cce..5ad60db 100644 --- a/libstdc++-v3/include/std/istream +++ b/libstdc++-v3/include/std/istream @@ -958,12 +958,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // 2328. Rvalue stream extraction should use perfect forwarding // 1203. More useful rvalue stream insertion - // SFINAE helper to check constraints for operator>>(Istream&&, T&&). - // If the constraints are satisfied, it is an alias for Istream&&. +#if __cpp_lib_concepts + template<typename _Is, typename _Tp> + requires __derived_from_ios_base<_Is> + && requires (_Is& __is, _Tp&& __t) { __is >> std::forward<_Tp>(__t); } + using __rvalue_stream_extraction_t = _Is&&; +#else template<typename _Is, typename _Tp, - typename = decltype(std::__rval_streamable<_Is>() - >> std::declval<_Tp>())> + typename = _Require_derived_from_ios_base<_Is>, + typename = decltype(std::declval<_Is&>() >> std::declval<_Tp>())> using __rvalue_stream_extraction_t = _Is&&; +#endif /** * @brief Generic extractor for rvalue stream |