#### buffer (35 of 42 overloads)

Create a new non-modifiable buffer from a contiguous container.

    template<
        typename T>
    const_buffer buffer(
        T & data,
        typename constraint< is_contiguous_iterator< typename T::iterator >::value, defaulted_constraint >::type  = defaulted_constraint(),
        typename constraint< !is_convertible< T, const_buffer >::value, defaulted_constraint >::type  = defaulted_constraint(),
        typename constraint< !is_convertible< T, mutable_buffer >::value, defaulted_constraint >::type  = defaulted_constraint(),
        typename constraint< is_const< typename remove_reference< typename std::iterator_traits< typename T::iterator >::reference >::type >::value, defaulted_constraint >::type  = defaulted_constraint());

###### Return Value

A `const_buffer` value equivalent to:

    const_buffer(
        data.size() ? &data[0] : 0,
        data.size() * sizeof(typename T::value_type));