## Class template attribute_terminal

boost::log::expressions::attribute_terminal

## Synopsis

    // In header: <boost/log/expressions/attr.hpp>

    template<typename T, typename FallbackPolicyT, typename TagT>
    class attribute_terminal {
    public:
      // types
      typedef void                                  _is_boost_log_terminal;  // Internal typedef for type categorization.
      typedef TagT                                  tag_type;                // Attribute tag type.
      typedef value_extractor_type::value_type      value_type;              // Attribute value type.
      typedef value_extractor_type::fallback_policy fallback_policy;         // Fallback policy type.

      // member classes/structs/unions

      // Function result type.
      template<typename >
      struct result {
      };
      template<typename ContextT>
      struct result<const this_type(ContextT)> {
        // types
        typedef remove_cv< typename remove_reference< typename phoenix::result_of::env< ContextT >::type >::type >::type                             env_type;
        typedef env_type::args_type                                                                                                                  args_type;
        typedef boost::result_of< const value_extractor_type(attribute_name const &, typename fusion::result_of::at_c< args_type, 0 >::type) >::type type;
      };
      template<typename ContextT>
      struct result<this_type(ContextT)> {
        // types
        typedef remove_cv< typename remove_reference< typename phoenix::result_of::env< ContextT >::type >::type >::type                       env_type;
        typedef env_type::args_type                                                                                                            args_type;
        typedef boost::result_of< value_extractor_type(attribute_name const &, typename fusion::result_of::at_c< args_type, 0 >::type) >::type type;
      };

      // construct/copy/destruct
      explicit attribute_terminal(attribute_name const &);
      template<typename U> attribute_terminal(attribute_name const &, U const &);
      attribute_terminal() = delete;

      // public member functions
      attribute_name get_name() const;
      fallback_policy const & get_fallback_policy() const;
      template<typename ContextT>
        result< this_type(ContextT const &) >::type operator()(ContextT const &);
      template<typename ContextT>
        result< const this_type(ContextT const &) >::type
        operator()(ContextT const &) const;
    };

## Description

An attribute value extraction terminal

### `attribute_terminal` public construct/copy/destruct

1.     explicit attribute_terminal(attribute_name const & name);

   Initializing constructor

2.     template<typename U>
         attribute_terminal(attribute_name const & name, U const & arg);

   Initializing constructor

3.     attribute_terminal() = delete;

### `attribute_terminal` public member functions

1.     attribute_name get_name() const;

   Returns: | Attribute value name

2.     fallback_policy const & get_fallback_policy() const;

   Returns: | Fallback policy

3.     template<typename ContextT>
         result< this_type(ContextT const &) >::type operator()(ContextT const & ctx);

   The operator extracts attribute value

4.     template<typename ContextT>
         result< const this_type(ContextT const &) >::type
         operator()(ContextT const & ctx) const;

   The operator extracts attribute value