#line 1 "include/boost/lockfree/lockfree_forward.hpp"
//  Copyright (C) 2008-2016 Tim Blechmann
//
//  Distributed under the Boost Software License, Version 1.0. (See
//  accompanying file LICENSE_1_0.txt or copy at
//  http://www.boost.org/LICENSE_1_0.txt)


#ifndef BOOST_LOCKFREE_FORWARD_HPP_INCLUDED
#define BOOST_LOCKFREE_FORWARD_HPP_INCLUDED


#ifndef BOOST_DOXYGEN_INVOKED

#    include <cstddef>
#    include <type_traits>

#    include <boost/config.hpp>

namespace boost { namespace lockfree {

// policies
template < bool IsFixedSized >
struct fixed_sized;

template < size_t Size >
struct capacity;

template < class Alloc >
struct allocator;


// data structures

template < typename T, typename... Options >
#    if !defined( BOOST_NO_CXX20_HDR_CONCEPTS )
    requires( std::is_copy_assignable_v< T >,
              std::is_trivially_assignable_v< T&, T >,
              std::is_trivially_destructible_v< T > )
#    endif
class queue;

template < typename T, typename... Options >
#    if !defined( BOOST_NO_CXX20_HDR_CONCEPTS )
    requires( std::is_copy_assignable_v< T > || std::is_move_assignable_v< T > )
#    endif
class stack;

template < typename T, typename... Options >
#    if !defined( BOOST_NO_CXX20_HDR_CONCEPTS )
    requires( std::is_default_constructible_v< T >, std::is_move_assignable_v< T > || std::is_copy_assignable_v< T > )
#    endif
class spsc_queue;
}}     // namespace boost::lockfree

#endif // BOOST_DOXYGEN_INVOKED

#endif // BOOST_LOCKFREE_FORWARD_HPP_INCLUDED
