std::as_const
| Defined in header <utility> | ||
|---|---|---|
| template <class T> constexpr std::add_const_t<T>& as_const(T& t) noexcept; | (1) | (since C++17) | 
| template <class T> void as_const(const T&&) = delete; | (2) | (since C++17) | 
1) Forms lvalue reference to const type of 
 t
2) const rvalue reference overload is deleted to disallow rvalue arguments
 Possible implementation
| template <class T>
constexpr std::add_const_t<T>& as_const(T& t) noexcept
{
    return t;
} | 
Example
#include <string>
#include <cassert>
#include <utility>
#include <type_traits>
 
int main()
{
    std::string mutableString = "Hello World!";
    const std::string& constView = std::as_const(mutableString);
 
    assert( &constView == &mutableString );
    assert( &std::as_const( mutableString ) == &mutableString );
 
    using WhatTypeIsIt = std::remove_reference_t<decltype(std::as_const(mutableString))>;
 
    static_assert(std::is_same<std::remove_const_t<WhatTypeIsIt>, std::string>::value,
            "WhatTypeIsIt should be some kind of string." );
    static_assert(!std::is_same< WhatTypeIsIt, std::string >::value,
            "WhatTypeIsIt shouldn't be a mutable string." );
}See also
| (C++11) | checks if a type is const-qualified (class template) | 
| (C++11)(C++11)(C++11) | adds constor/andvolatilespecifiers to the given type(class template) | 
| (C++11)(C++11)(C++11) | removes constor/andvolatilespecifiers from the given type(class template) | 
    © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
    http://en.cppreference.com/w/cpp/utility/as_const