home | help
std::as_const(3)	       C++ Standard Libary		std::as_const(3)

NAME
     std::as_const - std::as_const

Synopsis
	Defined in header <utility>
	template<  class  T  >					      (1) (since
     C++17)
	constexpr std::add_const_t<T>& as_const( T& t ) noexcept;
	template< class  T  >					     (2)  (since
     C++17)
	void as_const( const T&& ) = delete;

	1) Forms lvalue reference to const type of t.
	2)  const  rvalue reference overload is deleted to disallow rvalue argu-
     ments.

Possible implementation
	template<class T>
	constexpr std::add_const_t<T>& as_const(T& t) noexcept
	{
	    return t;
	}

Notes
	Feature-test macro  Value    Std      Feature
	__cpp_lib_as_const 201510L (C++17) std::as_const

Example
     // Run this code

      #include <cassert>
      #include <string>
      #include <type_traits>
      #include <utility>

      int main()
      {
	  std::string mutableString = "Hello World!";
	  auto&& constRef = std::as_const(mutableString);

	  mutableString.clear(); // OK
      //  constRef.clear(); // Error: 'constRef' is 'const' qualified,
			    //	      but 'clear' is not marked const

	  assert(&constRef == &mutableString);
	  assert(&std::as_const(mutableString) == &mutableString);

	  using ExprType =  std::remove_reference_t<decltype(std::as_const(muta-
     bleString))>;

	  static_assert(std::is_same_v<std::remove_const_t<ExprType>,
     std::string>,
			"ExprType should be some kind of string.");
	  static_assert(!std::is_same_v<ExprType, std::string>,
			"ExprType shouldn't be a mutable string.");
      }

See also
	is_const	      checks if a type is const-qualified
	(C++11) 	      (class template)
	add_cv
	add_const
	add_volatile	      adds const and/or volatile specifiers to the given
     type
	(C++11) 	      (class template)
	(C++11)
	(C++11)
	remove_cv
	remove_const
	remove_volatile        removes const and/or volatile specifiers from the
     given type
	(C++11) 	      (class template)
	(C++11)
	(C++11)
	ranges::as_const_view converts a view into a constant_range
	views::as_const       (class template) (range adaptor object)
	(C++23)

http://cppreference.com 	   2024.06.10			std::as_const(3)

home | help