Repository: redboltz/async_mqtt (language: cpp)

Issue:
Issue when destroying am::client
We have a case where we need to close and reconnect to a broker and we stumbled on an issue.

I've been able to reduce it to the following code that gives the following error when built/run with `-fsanitize=address`  
(There's an MQTT broker running locally)

```
void test() {
    as::io_context ioc;
    auto exe = ioc.get_executor();
    // auto amcl = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>(exe); // Works
    as::co_spawn(
        exe,
        [&] () -> as::awaitable<void> {
            auto amcl = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>(exe); // heap-use-after-free

            auto [ec_und] = co_await am::async_underlying_handshake(
                amcl.next_layer(),
                "127.0.0.1",
                "1883",
                as::as_tuple(as::use_awaitable)
            );

            auto [ec_con, connack_opt] = co_await amcl.async_start(
                am::v3_1_1::connect_packet{
                    true,   // clean_session
                    0,      // keep_alive
                    ""
                },
                as::as_tuple(as::use_awaitable)
            );

            auto [ec_disconnect] = co_await amcl.async_disconnect(
                am::v3_1_1::disconnect_packet{},
                as::as_tuple(as::use_awaitable)
            );

            co_await amcl.async_close(
                as::as_tuple(as::use_awaitable)
            );

            co_return;
        },
        as::detached
    );
    ioc.run();
}
```

We get the following output of the AddressSanitizer
[address_sanitizer.log](https://github.com/user-attachments/files/15956772/address_sanitizer.log)


Discussion / hints:
After some analysis, I found the root issue.
endpoint (and basic_endpoint) use enable_shared_from_this approach. It is required to keep member variables' life time during async operation is running even if the user code endpoint object is scoped out.
client has an endpoint internally. So endpoint members life time is well managed by the endpoint itself.
However, the member variables of the client is not. I had looked over that case.
Your code example is this case.

I will fix it using enable_shared_from_this approach like endpoint.
It would cause the breaking change.

Your code example would become as follows:

```cpp
#include <async_mqtt/all.hpp>

namespace as = boost::asio;
namespace am = async_mqtt;

void test() {
    as::io_context ioc;
    auto exe = ioc.get_executor();
    // auto amcl = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>(exe); // Works
    as::co_spawn(
        exe,
        [&] () -> as::awaitable<void> {
            auto amcl = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>::create(exe); // heap-use-after-free

            auto [ec_und] = co_await am::async_underlying_handshake(
                amcl->next_layer(),
                "127.0.0.1",
                "1883",
                as::as_tuple(as::use_awaitable)
            );
            (void)ec_und;
            auto [ec_con, connack_opt] = co_await amcl->async_start(
                am::v3_1_1::connect_packet{
                    true,   // clean_session
                    0,      // keep_alive
                    ""
                },
                as::as_tuple(as::use_awaitable)
            );

            auto [ec_disconnect] = co_await amcl->async_disconnect(
                am::v3_1_1::disconnect_packet{},
                as::as_tuple(as::use_awaitable)
            );
            (void)ec_disconnect;

            co_await amcl->async_close(
                as::as_tuple(as::use_awaitable)
            );

            co_return;
        },
        as::detached
    );
    ioc.run();
}

int main() {
    am::setup_log(am::severity_level::trace);
    test();
}
```

I start fixing.



Fix patch:
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index a051b2878..aff7bc9ba 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -1,8 +1,15 @@
 :last-update-label!:
 
 = History
-== 7.0.1
+== 8.0.0
+=== breaking changes
+* `client` becomes `shared_ptr` similar as `endpoint`. #315
+** To create `client` instance, `client<...>::create(args)` similar as `endpoint`.
+** This is required to keep client's lifetime during async operation is working.
+** `client` and `endpoint` are consistent interface now.
+=== other updates
 * Move endpoint definition (using) to endpoint_fwd.hpp #311, #312
+* install `*.ipp` files along with other header files #309
 * Refined documents. #308
 
 == 7.0.0
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c18535596..fb0b566bf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,7 +5,7 @@
 # http://www.boost.org/LICENSE_1_0.txt)
 
 cmake_minimum_required (VERSION 3.13.0)
-project(async_mqtt_iface VERSION 7.0.1)
+project(async_mqtt_iface VERSION 8.0.0)
 
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -136,7 +136,7 @@ if(DOXYGEN_FOUND)
         COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS          = *.hpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
         COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY       = doc" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
         COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME           = async_mqtt" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
-        COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NUMBER         = 7.0.1" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+        COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NUMBER         = 8.0.0" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
         COMMAND ${CMAKE_COMMAND} -E echo "RECURSIVE              = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
         COMMAND ${CMAKE_COMMAND} -E echo "PREDEFINED             = GENERATING_DOCUMENTATION ASYNC_MQTT_USE_TLS ASYNC_MQTT_USE_WS ASYNC_MQTT_USE_LOG" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
         COMMAND ${CMAKE_COMMAND} -E echo "INPUT                  = ${CMAKE_CURRENT_SOURCE_DIR}/include/async_mqtt" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
diff --git a/README.md b/README.md
index d41609b37..86dc93f1b 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 Asynchronous MQTT communication library.
 
-Version 7.0.1 [![Actions Status](https://github.com/redboltz/async_mqtt/workflows/CI/badge.svg)](https://github.com/redboltz/async_mqtt/actions)[![codecov](https://codecov.io/gh/redboltz/async_mqtt/branch/main/graph/badge.svg)](https://codecov.io/gh/redboltz/async_mqtt)
+Version 8.0.0 [![Actions Status](https://github.com/redboltz/async_mqtt/workflows/CI/badge.svg)](https://github.com/redboltz/async_mqtt/actions)[![codecov](https://codecov.io/gh/redboltz/async_mqtt/branch/main/graph/badge.svg)](https://codecov.io/gh/redboltz/async_mqtt)
 
 This is Boost.Asio oriented asynchronous MQTT communication library. You can use async_mqtt to develop not only your MQTT client application but also your server (e.g. broker).
 Based on https://github.com/redboltz/mqtt_cpp experience, there are many improvements. See overview.
diff --git a/doc/CHANGELOG.html b/doc/CHANGELOG.html
index 13aafffde..6cd4608af 100644
--- a/doc/CHANGELOG.html
+++ b/doc/CHANGELOG.html
@@ -5,7 +5,7 @@
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta name="generator" content="Asciidoctor 2.0.22">
-<meta name="author" content="== 7.0.1">
+<meta name="author" content="== 8.0.0">
 <title>History</title>
 <style>
 /*! Copyright (C) 2019, TomTom (http://tomtom.com).
@@ -63,9 +63,8 @@
 <div id="header">
 <h1>History</h1>
 <div class="details">
-<span id="author" class="author">== 7.0.1</span><br>
-<span id="revnumber">version 311,</span>
-<span id="revdate">#312</span>
+<span id="author" class="author">== 8.0.0</span><br>
+<span id="revdate">=== breaking changes</span>
 </div>
 </div>
 <div id="content">
@@ -74,6 +73,29 @@ <h1>History</h1>
 <div class="ulist">
 <ul>
 <li>
+<p><code>client</code> becomes <code>shared_ptr</code> similar as <code>endpoint</code>. #315</p>
+<div class="ulist">
+<ul>
+<li>
+<p>To create <code>client</code> instance, <code>client&lt;&#8230;&#8203;&gt;::create(args)</code> similar as <code>endpoint</code>.</p>
+</li>
+<li>
+<p>This is required to keep client&#8217;s lifetime during async operation is working.</p>
+</li>
+<li>
+<p><code>client</code> and <code>endpoint</code> are consistent interface now.
+=== other updates</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Move endpoint definition (using) to endpoint_fwd.hpp #311, #312</p>
+</li>
+<li>
+<p>install <code>*.ipp</code> files along with other header files #309</p>
+</li>
+<li>
 <p>Refined documents. #308</p>
 </li>
 </ul>
@@ -853,7 +875,6 @@ <h2 id="_1_0_0">1.0.0</h2>
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 311<br>
 </div>
 </div>
 </body>
diff --git a/doc/api/all_8hpp_source.html b/doc/api/all_8hpp_source.html
index 0d08b5194..e49bda509 100644
--- a/doc/api/all_8hpp_source.html
+++ b/doc/api/all_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/annotated.html b/doc/api/annotated.html
index aa16bf29c..72071fa6d 100644
--- a/doc/api/annotated.html
+++ b/doc/api/annotated.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/buffer_8hpp_source.html b/doc/api/buffer_8hpp_source.html
index 4ef5c5ff4..36deab727 100644
--- a/doc/api/buffer_8hpp_source.html
+++ b/doc/api/buffer_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/buffer__to__packet__variant_8hpp_source.html b/doc/api/buffer__to__packet__variant_8hpp_source.html
index f93b4f4e3..1001e89ac 100644
--- a/doc/api/buffer__to__packet__variant_8hpp_source.html
+++ b/doc/api/buffer__to__packet__variant_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1basic__endpoint-members.html b/doc/api/classasync__mqtt_1_1basic__endpoint-members.html
index 0eb18e394..0b110239e 100644
--- a/doc/api/classasync__mqtt_1_1basic__endpoint-members.html
+++ b/doc/api/classasync__mqtt_1_1basic__endpoint-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1basic__endpoint.html b/doc/api/classasync__mqtt_1_1basic__endpoint.html
index 70bfc7f31..54a8e41b9 100644
--- a/doc/api/classasync__mqtt_1_1basic__endpoint.html
+++ b/doc/api/classasync__mqtt_1_1basic__endpoint.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1basic__packet__variant-members.html b/doc/api/classasync__mqtt_1_1basic__packet__variant-members.html
index 31ebb6416..34e404428 100644
--- a/doc/api/classasync__mqtt_1_1basic__packet__variant-members.html
+++ b/doc/api/classasync__mqtt_1_1basic__packet__variant-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1basic__packet__variant.html b/doc/api/classasync__mqtt_1_1basic__packet__variant.html
index eb00de8ab..3b8138fdc 100644
--- a/doc/api/classasync__mqtt_1_1basic__packet__variant.html
+++ b/doc/api/classasync__mqtt_1_1basic__packet__variant.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1basic__store__packet__variant-members.html b/doc/api/classasync__mqtt_1_1basic__store__packet__variant-members.html
index 007e4ca27..2e1bec542 100644
--- a/doc/api/classasync__mqtt_1_1basic__store__packet__variant-members.html
+++ b/doc/api/classasync__mqtt_1_1basic__store__packet__variant-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1basic__store__packet__variant.html b/doc/api/classasync__mqtt_1_1basic__store__packet__variant.html
index edafd2c05..c197a93f3 100644
--- a/doc/api/classasync__mqtt_1_1basic__store__packet__variant.html
+++ b/doc/api/classasync__mqtt_1_1basic__store__packet__variant.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1buffer-members.html b/doc/api/classasync__mqtt_1_1buffer-members.html
index 8b4ae6c9a..d909abd9c 100644
--- a/doc/api/classasync__mqtt_1_1buffer-members.html
+++ b/doc/api/classasync__mqtt_1_1buffer-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1buffer.html b/doc/api/classasync__mqtt_1_1buffer.html
index bfaf1b26e..bc8c0715b 100644
--- a/doc/api/classasync__mqtt_1_1buffer.html
+++ b/doc/api/classasync__mqtt_1_1buffer.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1client-members.html b/doc/api/classasync__mqtt_1_1client-members.html
index 311a8853e..373176c6d 100644
--- a/doc/api/classasync__mqtt_1_1client-members.html
+++ b/doc/api/classasync__mqtt_1_1client-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
@@ -116,30 +116,29 @@
   <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a6808a6f7f9535ec152dcc9ee430caf92">async_start</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
   <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a10936f4e6d279d8fd869c6774f65dbaf">async_subscribe</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7">async_unsubscribe</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df">client</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f">client</a>(client&lt; Version, Other &gt; &amp;&amp;other)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
   <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69">client</a>(this_type const &amp;)=delete</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70">client</a>(this_type &amp;&amp;)=default</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a4eaa1645f73cbdc77125db56b09bd309">endpoint_type</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d">executor_type</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d">get_endpoint</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a53ecf68e9242a4355251ad8abbbebd93">get_endpoint</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825">get_executor</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158">lowest_layer</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f">lowest_layer</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">lowest_layer_type</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a243692c7f749de1b589c665401a5b43a">next_layer</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28">next_layer</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">next_layer_type</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806">operator=</a>(this_type const &amp;)=delete</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d">operator=</a>(this_type &amp;&amp;)=default</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc">register_packet_id</a>(packet_id_type packet_id)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2">release_packet_id</a>(packet_id_type packet_id)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a565335cdfde52860dcfcb483624b6b7e">set_auto_map_topic_alias_send</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2">set_auto_replace_topic_alias_send</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf">set_bulk_read_buffer_size</a>(std::size_t val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649">set_bulk_write</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7">set_pingresp_recv_timeout_ms</a>(std::size_t ms)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41">create</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a4eaa1645f73cbdc77125db56b09bd309">endpoint_type</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d">executor_type</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d">get_endpoint</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a53ecf68e9242a4355251ad8abbbebd93">get_endpoint</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825">get_executor</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158">lowest_layer</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f">lowest_layer</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">lowest_layer_type</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a243692c7f749de1b589c665401a5b43a">next_layer</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28">next_layer</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">next_layer_type</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806">operator=</a>(this_type const &amp;)=delete</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d">operator=</a>(this_type &amp;&amp;)=default</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc">register_packet_id</a>(packet_id_type packet_id)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2">release_packet_id</a>(packet_id_type packet_id)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a565335cdfde52860dcfcb483624b6b7e">set_auto_map_topic_alias_send</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2">set_auto_replace_topic_alias_send</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf">set_bulk_read_buffer_size</a>(std::size_t val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649">set_bulk_write</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7">set_pingresp_recv_timeout_ms</a>(std::size_t ms)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client&lt; Version, NextLayer &gt;</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 </div><!-- doc-content -->
 <!-- start footer part -->
diff --git a/doc/api/classasync__mqtt_1_1client.html b/doc/api/classasync__mqtt_1_1client.html
index ebb843ab1..7b089f404 100644
--- a/doc/api/classasync__mqtt_1_1client.html
+++ b/doc/api/classasync__mqtt_1_1client.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
@@ -101,6 +101,7 @@
 <a href="#nested-classes">Classes</a> &#124;
 <a href="#pub-types">Public Types</a> &#124;
 <a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
 <a href="classasync__mqtt_1_1client-members.html">List of all members</a>  </div>
   <div class="headertitle"><div class="title">async_mqtt::client&lt; Version, NextLayer &gt; Class Template Reference<div class="ingroups"><a class="el" href="group__connection.html">MQTT connection</a> &raquo; <a class="el" href="group__client.html">client (High level MQTT client)</a></div></div></div>
 </div><!--header-->
@@ -110,6 +111,8 @@
  <a href="#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="client_8hpp_source.html">client.hpp</a>&gt;</code></p>
+
+<p>Inherits std::enable_shared_from_this&lt; client&lt; Version, NextLayer &gt; &gt;.</p>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
 Classes</h2></td></tr>
@@ -141,14 +144,6 @@
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a9b17702ad539982547fa5dc3de34f8df" id="r_a9b17702ad539982547fa5dc3de34f8df"><td class="memTemplParams" colspan="2">template&lt;typename... Args&gt; </td></tr>
-<tr class="memitem:a9b17702ad539982547fa5dc3de34f8df"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a9b17702ad539982547fa5dc3de34f8df">client</a> (Args &amp;&amp;... args)</td></tr>
-<tr class="memdesc:a9b17702ad539982547fa5dc3de34f8df"><td class="mdescLeft">&#160;</td><td class="mdescRight">constructor  <br /></td></tr>
-<tr class="separator:a9b17702ad539982547fa5dc3de34f8df"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae422a3de6052d79df44db7f73994c54f" id="r_ae422a3de6052d79df44db7f73994c54f"><td class="memTemplParams" colspan="2">template&lt;typename Other &gt; </td></tr>
-<tr class="memitem:ae422a3de6052d79df44db7f73994c54f"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ae422a3de6052d79df44db7f73994c54f">client</a> (<a class="el" href="classasync__mqtt_1_1client.html">client</a>&lt; Version, Other &gt; &amp;&amp;other)</td></tr>
-<tr class="memdesc:ae422a3de6052d79df44db7f73994c54f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rebinding constructor This constructor creates a client from the client with a different executor.  <br /></td></tr>
-<tr class="separator:ae422a3de6052d79df44db7f73994c54f"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a09c99f0a62f86b9449cbd2407d74be69" id="r_a09c99f0a62f86b9449cbd2407d74be69"><td class="memItemLeft" align="right" valign="top"><a id="a09c99f0a62f86b9449cbd2407d74be69" name="a09c99f0a62f86b9449cbd2407d74be69"></a>
 &#160;</td><td class="memItemRight" valign="bottom"><b>client</b> (<a class="el" href="classasync__mqtt_1_1client.html">this_type</a> const &amp;)=delete</td></tr>
 <tr class="memdesc:a09c99f0a62f86b9449cbd2407d74be69"><td class="mdescLeft">&#160;</td><td class="mdescRight">copy constructor <b>deleted</b> <br /></td></tr>
@@ -262,6 +257,13 @@
 <tr class="memitem:a5e091785f9ed21afc1aeaf9a09ccebb2" id="r_a5e091785f9ed21afc1aeaf9a09ccebb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5e091785f9ed21afc1aeaf9a09ccebb2">release_packet_id</a> (<a class="el" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id)</td></tr>
 <tr class="memdesc:a5e091785f9ed21afc1aeaf9a09ccebb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">release packet_id.  <br /></td></tr>
 <tr class="separator:a5e091785f9ed21afc1aeaf9a09ccebb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-methods" name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a38459925809f8106efee03ade8e66c41" id="r_a38459925809f8106efee03ade8e66c41"><td class="memTemplParams" colspan="2">template&lt;typename... Args&gt; </td></tr>
+<tr class="memitem:a38459925809f8106efee03ade8e66c41"><td class="memTemplItemLeft" align="right" valign="top">static std::shared_ptr&lt; <a class="el" href="classasync__mqtt_1_1client.html">this_type</a> &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a38459925809f8106efee03ade8e66c41">create</a> (Args &amp;&amp;... args)</td></tr>
+<tr class="memdesc:a38459925809f8106efee03ade8e66c41"><td class="mdescLeft">&#160;</td><td class="mdescRight">create  <br /></td></tr>
+<tr class="separator:a38459925809f8106efee03ade8e66c41"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="group__mqtt.html#ga133d6d106d4e527d07fea2d12544c0c0">protocol_version</a> Version, typename NextLayer&gt;<br />
@@ -346,97 +348,7 @@ <h4><a class="anchor" id="autotoc_md1"></a>
   </table>
   </dd>
 </dl>
-</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="a9b17702ad539982547fa5dc3de34f8df" name="a9b17702ad539982547fa5dc3de34f8df"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9b17702ad539982547fa5dc3de34f8df">&#9670;&#160;</a></span>client() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template&lt;<a class="el" href="group__mqtt.html#ga133d6d106d4e527d07fea2d12544c0c0">protocol_version</a> Version, typename NextLayer &gt; </div>
-<div class="memtemplate">
-template&lt;typename... Args&gt; </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client</a>&lt; Version, NextLayer &gt;::client </td>
-          <td>(</td>
-          <td class="paramtype">Args &amp;&amp;...</td>          <td class="paramname"><span class="paramname"><em>args</em></span></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>constructor </p>
-<dl class="tparams"><dt>Template Parameters</dt><dd>
-  <table class="tparams">
-    <tr><td class="paramname">Args</td><td>Types for the next layer </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">args</td><td>args for the next layer.<ul>
-<li>There are predefined next layer types:<ul>
-<li><a class="el" href="group__predefined__layer__mqtt.html#gaf0fedc2324340e8a97a85d091e912983" title="Type alias of Boost.Asio TCP socket.">protocol::mqtt</a></li>
-<li><a class="el" href="group__predefined__layer__mqtts.html#ga2c89e72af39c22d974e557ad822a5601" title="Type alias of boost::asio::ssl::stream of mqtt.">protocol::mqtts</a></li>
-<li><a class="el" href="group__predefined__layer__ws.html#gafa0029e1fe1da9ffc3e87e073cc1930c" title="Type alias of boost::beast::websocket::stream of mqtt.">protocol::ws</a></li>
-<li><a class="el" href="group__predefined__layer__wss.html#ga6ca99bfaf9ccf4acfac8209e5dd979e5" title="Type alias of boost::beast::websocket::stream of mqtts async_underlying_handshake function can be cal...">protocol::wss</a> </li>
-</ul>
-</li>
-</ul>
-</td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a id="ae422a3de6052d79df44db7f73994c54f" name="ae422a3de6052d79df44db7f73994c54f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae422a3de6052d79df44db7f73994c54f">&#9670;&#160;</a></span>client() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<div class="memtemplate">
-template&lt;<a class="el" href="group__mqtt.html#ga133d6d106d4e527d07fea2d12544c0c0">protocol_version</a> Version, typename NextLayer &gt; </div>
-<div class="memtemplate">
-template&lt;typename Other &gt; </div>
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client</a>&lt; Version, NextLayer &gt;::client </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="classasync__mqtt_1_1client.html">client</a>&lt; Version, Other &gt; &amp;&amp;</td>          <td class="paramname"><span class="paramname"><em>other</em></span></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Rebinding constructor This constructor creates a client from the client with a different executor. </p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">other</td><td>The other client to construct from. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
+</div><h2 class="groupheader">Member Function Documentation</h2>
 <a id="ab160ebb19bd7e51f8460e59a88deff86" name="ab160ebb19bd7e51f8460e59a88deff86"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#ab160ebb19bd7e51f8460e59a88deff86">&#9670;&#160;</a></span>acquire_unique_packet_id()</h2>
 
@@ -1279,6 +1191,59 @@ <h2 class="memtitle"><span class="permalink"><a href="#a29e1d876f3ec12c7a8d69c40
 </ul>
 <p>if they are also supported by the NextLayer type's async_read_some and async_write_some operation. </p>
 
+</div>
+</div>
+<a id="a38459925809f8106efee03ade8e66c41" name="a38459925809f8106efee03ade8e66c41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a38459925809f8106efee03ade8e66c41">&#9670;&#160;</a></span>create()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;<a class="el" href="group__mqtt.html#ga133d6d106d4e527d07fea2d12544c0c0">protocol_version</a> Version, typename NextLayer &gt; </div>
+<div class="memtemplate">
+template&lt;typename... Args&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static std::shared_ptr&lt; <a class="el" href="classasync__mqtt_1_1client.html">this_type</a> &gt; <a class="el" href="classasync__mqtt_1_1client.html">async_mqtt::client</a>&lt; Version, NextLayer &gt;::create </td>
+          <td>(</td>
+          <td class="paramtype">Args &amp;&amp;...</td>          <td class="paramname"><span class="paramname"><em>args</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>create </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+  <table class="tparams">
+    <tr><td class="paramname">Args</td><td>Types for the next layer </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">args</td><td>args for the next layer.<ul>
+<li>There are predefined next layer types:<ul>
+<li><a class="el" href="group__predefined__layer__mqtt.html#gaf0fedc2324340e8a97a85d091e912983" title="Type alias of Boost.Asio TCP socket.">protocol::mqtt</a></li>
+<li><a class="el" href="group__predefined__layer__mqtts.html#ga2c89e72af39c22d974e557ad822a5601" title="Type alias of boost::asio::ssl::stream of mqtt.">protocol::mqtts</a></li>
+<li><a class="el" href="group__predefined__layer__ws.html#gafa0029e1fe1da9ffc3e87e073cc1930c" title="Type alias of boost::beast::websocket::stream of mqtt.">protocol::ws</a></li>
+<li><a class="el" href="group__predefined__layer__wss.html#ga6ca99bfaf9ccf4acfac8209e5dd979e5" title="Type alias of boost::beast::websocket::stream of mqtts async_underlying_handshake function can be cal...">protocol::wss</a> </li>
+</ul>
+</li>
+</ul>
+</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>shared_ptr of client. </dd></dl>
+
 </div>
 </div>
 <a id="a53ecf68e9242a4355251ad8abbbebd93" name="a53ecf68e9242a4355251ad8abbbebd93"></a>
diff --git a/doc/api/classasync__mqtt_1_1client.js b/doc/api/classasync__mqtt_1_1client.js
index 7287350a1..0ff1fa34c 100644
--- a/doc/api/classasync__mqtt_1_1client.js
+++ b/doc/api/classasync__mqtt_1_1client.js
@@ -6,8 +6,6 @@ var classasync__mqtt_1_1client =
     [ "executor_type", "classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d", null ],
     [ "lowest_layer_type", "classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef", null ],
     [ "next_layer_type", "classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7", null ],
-    [ "client", "classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df", null ],
-    [ "client", "classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f", null ],
     [ "client", "classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69", null ],
     [ "client", "classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70", null ],
     [ "acquire_unique_packet_id", "classasync__mqtt_1_1client.html#ab160ebb19bd7e51f8460e59a88deff86", null ],
diff --git a/doc/api/classasync__mqtt_1_1property_1_1assigned__client__identifier-members.html b/doc/api/classasync__mqtt_1_1property_1_1assigned__client__identifier-members.html
index 720ca1892..07d6c5fa4 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1assigned__client__identifier-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1assigned__client__identifier-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1assigned__client__identifier.html b/doc/api/classasync__mqtt_1_1property_1_1assigned__client__identifier.html
index a018c6329..5caf68a69 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1assigned__client__identifier.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1assigned__client__identifier.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1authentication__data-members.html b/doc/api/classasync__mqtt_1_1property_1_1authentication__data-members.html
index f3bef737f..91215c19f 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1authentication__data-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1authentication__data-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1authentication__data.html b/doc/api/classasync__mqtt_1_1property_1_1authentication__data.html
index 0b86dc9a4..62933af83 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1authentication__data.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1authentication__data.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1authentication__method-members.html b/doc/api/classasync__mqtt_1_1property_1_1authentication__method-members.html
index 10674d627..45fcfe48e 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1authentication__method-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1authentication__method-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1authentication__method.html b/doc/api/classasync__mqtt_1_1property_1_1authentication__method.html
index 9ebeee447..09179bdc4 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1authentication__method.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1authentication__method.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1content__type-members.html b/doc/api/classasync__mqtt_1_1property_1_1content__type-members.html
index a0c3efd03..918411eb0 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1content__type-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1content__type-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1content__type.html b/doc/api/classasync__mqtt_1_1property_1_1content__type.html
index 988e8ce55..08460c7b1 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1content__type.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1content__type.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1correlation__data-members.html b/doc/api/classasync__mqtt_1_1property_1_1correlation__data-members.html
index cbae3efde..d81d42536 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1correlation__data-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1correlation__data-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1correlation__data.html b/doc/api/classasync__mqtt_1_1property_1_1correlation__data.html
index 7f77073fa..5722dda79 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1correlation__data.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1correlation__data.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1maximum__packet__size-members.html b/doc/api/classasync__mqtt_1_1property_1_1maximum__packet__size-members.html
index 7c258fd11..6fdd2c7f2 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1maximum__packet__size-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1maximum__packet__size-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1maximum__packet__size.html b/doc/api/classasync__mqtt_1_1property_1_1maximum__packet__size.html
index 6794a6844..615f75486 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1maximum__packet__size.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1maximum__packet__size.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1maximum__qos-members.html b/doc/api/classasync__mqtt_1_1property_1_1maximum__qos-members.html
index 1111b200f..b2052506a 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1maximum__qos-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1maximum__qos-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1maximum__qos.html b/doc/api/classasync__mqtt_1_1property_1_1maximum__qos.html
index fb82f2949..c499e8b34 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1maximum__qos.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1maximum__qos.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1message__expiry__interval-members.html b/doc/api/classasync__mqtt_1_1property_1_1message__expiry__interval-members.html
index f4e122b58..6fdadfe43 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1message__expiry__interval-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1message__expiry__interval-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1message__expiry__interval.html b/doc/api/classasync__mqtt_1_1property_1_1message__expiry__interval.html
index d46c9d23b..bf6718113 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1message__expiry__interval.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1message__expiry__interval.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1payload__format__indicator-members.html b/doc/api/classasync__mqtt_1_1property_1_1payload__format__indicator-members.html
index c818bda86..6ae2af8c3 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1payload__format__indicator-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1payload__format__indicator-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1payload__format__indicator.html b/doc/api/classasync__mqtt_1_1property_1_1payload__format__indicator.html
index ef684a518..91a1bcf0a 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1payload__format__indicator.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1payload__format__indicator.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1reason__string-members.html b/doc/api/classasync__mqtt_1_1property_1_1reason__string-members.html
index 5d1dbce1c..182f26d62 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1reason__string-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1reason__string-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1reason__string.html b/doc/api/classasync__mqtt_1_1property_1_1reason__string.html
index 5419bda6a..fa296d47b 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1reason__string.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1reason__string.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1receive__maximum-members.html b/doc/api/classasync__mqtt_1_1property_1_1receive__maximum-members.html
index c48af6603..c9b23cc26 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1receive__maximum-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1receive__maximum-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1receive__maximum.html b/doc/api/classasync__mqtt_1_1property_1_1receive__maximum.html
index b57c0fee3..b0324b4bd 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1receive__maximum.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1receive__maximum.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1request__problem__information-members.html b/doc/api/classasync__mqtt_1_1property_1_1request__problem__information-members.html
index 8cf78be3e..0ec273c20 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1request__problem__information-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1request__problem__information-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1request__problem__information.html b/doc/api/classasync__mqtt_1_1property_1_1request__problem__information.html
index a0caa0280..b4f167a23 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1request__problem__information.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1request__problem__information.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1request__response__information-members.html b/doc/api/classasync__mqtt_1_1property_1_1request__response__information-members.html
index 83cfe176b..91654364e 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1request__response__information-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1request__response__information-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1request__response__information.html b/doc/api/classasync__mqtt_1_1property_1_1request__response__information.html
index 2b60be1ee..86895b04a 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1request__response__information.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1request__response__information.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1response__information-members.html b/doc/api/classasync__mqtt_1_1property_1_1response__information-members.html
index b867329db..d1f2a1752 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1response__information-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1response__information-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1response__information.html b/doc/api/classasync__mqtt_1_1property_1_1response__information.html
index a5e2f1313..652f6d3c5 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1response__information.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1response__information.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1response__topic-members.html b/doc/api/classasync__mqtt_1_1property_1_1response__topic-members.html
index 594db4900..e160c5713 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1response__topic-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1response__topic-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1response__topic.html b/doc/api/classasync__mqtt_1_1property_1_1response__topic.html
index b056a61ee..90152526d 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1response__topic.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1response__topic.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1retain__available-members.html b/doc/api/classasync__mqtt_1_1property_1_1retain__available-members.html
index 645f101cb..e77147f82 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1retain__available-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1retain__available-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1retain__available.html b/doc/api/classasync__mqtt_1_1property_1_1retain__available.html
index f72325949..e7a547acc 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1retain__available.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1retain__available.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1server__keep__alive-members.html b/doc/api/classasync__mqtt_1_1property_1_1server__keep__alive-members.html
index 2aaebae49..c3a4b96c8 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1server__keep__alive-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1server__keep__alive-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1server__keep__alive.html b/doc/api/classasync__mqtt_1_1property_1_1server__keep__alive.html
index 5d6c0e357..3374a8d69 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1server__keep__alive.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1server__keep__alive.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1server__reference-members.html b/doc/api/classasync__mqtt_1_1property_1_1server__reference-members.html
index 69cb323f3..b3efa3d2b 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1server__reference-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1server__reference-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1server__reference.html b/doc/api/classasync__mqtt_1_1property_1_1server__reference.html
index fead56a64..5e155b819 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1server__reference.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1server__reference.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1session__expiry__interval-members.html b/doc/api/classasync__mqtt_1_1property_1_1session__expiry__interval-members.html
index 553474548..fa0d66440 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1session__expiry__interval-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1session__expiry__interval-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1session__expiry__interval.html b/doc/api/classasync__mqtt_1_1property_1_1session__expiry__interval.html
index 2e4c1f588..af88d8a9a 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1session__expiry__interval.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1session__expiry__interval.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1shared__subscription__available-members.html b/doc/api/classasync__mqtt_1_1property_1_1shared__subscription__available-members.html
index 6d48acf3f..895531bcc 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1shared__subscription__available-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1shared__subscription__available-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1shared__subscription__available.html b/doc/api/classasync__mqtt_1_1property_1_1shared__subscription__available.html
index a99e2188d..889ae036d 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1shared__subscription__available.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1shared__subscription__available.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier-members.html b/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier-members.html
index bb1cdbec7..b2cd5834a 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier.html b/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier.html
index 106331a51..e7c83dc6c 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier__available-members.html b/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier__available-members.html
index 2e0759ca7..54b637275 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier__available-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier__available-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier__available.html b/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier__available.html
index 0ccfa985c..e1b30b6e5 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier__available.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1subscription__identifier__available.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1topic__alias-members.html b/doc/api/classasync__mqtt_1_1property_1_1topic__alias-members.html
index f96abb4f8..4a792dfab 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1topic__alias-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1topic__alias-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1topic__alias.html b/doc/api/classasync__mqtt_1_1property_1_1topic__alias.html
index 57138963a..3545acd6d 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1topic__alias.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1topic__alias.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1topic__alias__maximum-members.html b/doc/api/classasync__mqtt_1_1property_1_1topic__alias__maximum-members.html
index 8e60180d8..173347d07 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1topic__alias__maximum-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1topic__alias__maximum-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1topic__alias__maximum.html b/doc/api/classasync__mqtt_1_1property_1_1topic__alias__maximum.html
index e7ee2f0a1..74d13a541 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1topic__alias__maximum.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1topic__alias__maximum.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1user__property-members.html b/doc/api/classasync__mqtt_1_1property_1_1user__property-members.html
index f28d36874..4e4724045 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1user__property-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1user__property-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1user__property.html b/doc/api/classasync__mqtt_1_1property_1_1user__property.html
index ed46179ff..1fa128cd4 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1user__property.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1user__property.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1wildcard__subscription__available-members.html b/doc/api/classasync__mqtt_1_1property_1_1wildcard__subscription__available-members.html
index 993374a5f..8b12cbfe8 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1wildcard__subscription__available-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1wildcard__subscription__available-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1wildcard__subscription__available.html b/doc/api/classasync__mqtt_1_1property_1_1wildcard__subscription__available.html
index c682f9524..79ca8092a 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1wildcard__subscription__available.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1wildcard__subscription__available.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1will__delay__interval-members.html b/doc/api/classasync__mqtt_1_1property_1_1will__delay__interval-members.html
index f6f34c3b6..a121bc9bc 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1will__delay__interval-members.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1will__delay__interval-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property_1_1will__delay__interval.html b/doc/api/classasync__mqtt_1_1property_1_1will__delay__interval.html
index 86d5f9ce9..cdf650d6d 100644
--- a/doc/api/classasync__mqtt_1_1property_1_1will__delay__interval.html
+++ b/doc/api/classasync__mqtt_1_1property_1_1will__delay__interval.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property__variant-members.html b/doc/api/classasync__mqtt_1_1property__variant-members.html
index 5a01114e6..78a26adcb 100644
--- a/doc/api/classasync__mqtt_1_1property__variant-members.html
+++ b/doc/api/classasync__mqtt_1_1property__variant-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1property__variant.html b/doc/api/classasync__mqtt_1_1property__variant.html
index 8c074c04f..2cbd50403 100644
--- a/doc/api/classasync__mqtt_1_1property__variant.html
+++ b/doc/api/classasync__mqtt_1_1property__variant.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1topic__sharename-members.html b/doc/api/classasync__mqtt_1_1topic__sharename-members.html
index 77b45774f..7dfd9b148 100644
--- a/doc/api/classasync__mqtt_1_1topic__sharename-members.html
+++ b/doc/api/classasync__mqtt_1_1topic__sharename-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1topic__sharename.html b/doc/api/classasync__mqtt_1_1topic__sharename.html
index 79648d7da..c5ea00748 100644
--- a/doc/api/classasync__mqtt_1_1topic__sharename.html
+++ b/doc/api/classasync__mqtt_1_1topic__sharename.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1topic__subopts-members.html b/doc/api/classasync__mqtt_1_1topic__subopts-members.html
index 598af0fad..feb94b2ff 100644
--- a/doc/api/classasync__mqtt_1_1topic__subopts-members.html
+++ b/doc/api/classasync__mqtt_1_1topic__subopts-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1topic__subopts.html b/doc/api/classasync__mqtt_1_1topic__subopts.html
index 774fdaf84..74c8fe02c 100644
--- a/doc/api/classasync__mqtt_1_1topic__subopts.html
+++ b/doc/api/classasync__mqtt_1_1topic__subopts.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__puback__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__puback__packet-members.html
index 024ce5add..6d7618a87 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__puback__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__puback__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__puback__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__puback__packet.html
index e7798860e..e929abbae 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__puback__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__puback__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubcomp__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubcomp__packet-members.html
index 81f7cdc15..776783986 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubcomp__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubcomp__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubcomp__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubcomp__packet.html
index 2e6119e16..92c70658c 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubcomp__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubcomp__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__publish__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__publish__packet-members.html
index e7a3c2a08..89c9fa74a 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__publish__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__publish__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__publish__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__publish__packet.html
index 9526d4df4..41a4fa90d 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__publish__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__publish__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrec__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrec__packet-members.html
index c7ef10f29..54993dca1 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrec__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrec__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrec__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrec__packet.html
index ea37092ef..7a42a0124 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrec__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrec__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrel__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrel__packet-members.html
index a640e3342..b52e0a198 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrel__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrel__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrel__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrel__packet.html
index 86bb3cda1..315525210 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrel__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__pubrel__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__suback__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__suback__packet-members.html
index e6a8103e2..4253c31bb 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__suback__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__suback__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__suback__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__suback__packet.html
index 01968c3d3..a602be279 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__suback__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__suback__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__subscribe__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__subscribe__packet-members.html
index 6544af94c..29bf2eb7d 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__subscribe__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__subscribe__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__subscribe__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__subscribe__packet.html
index ce2e2f8cf..617850e2c 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__subscribe__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__subscribe__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsuback__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsuback__packet-members.html
index ea4fdc205..5a991a93f 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsuback__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsuback__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsuback__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsuback__packet.html
index 758ad62b6..b659999d5 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsuback__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsuback__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsubscribe__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsubscribe__packet-members.html
index 84d3f4f0a..84587b80d 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsubscribe__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsubscribe__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsubscribe__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsubscribe__packet.html
index c4716ded4..ee1744ef6 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsubscribe__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1basic__unsubscribe__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1connack__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1connack__packet-members.html
index ef82e616c..e7c0f59e6 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1connack__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1connack__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1connack__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1connack__packet.html
index 3498e6046..ac7f6d0a2 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1connack__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1connack__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1connect__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1connect__packet-members.html
index bb84d2048..f046dbff2 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1connect__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1connect__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1connect__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1connect__packet.html
index eaf6af806..93ed56f52 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1connect__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1connect__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1disconnect__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1disconnect__packet-members.html
index 7a46ce94f..995661e3e 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1disconnect__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1disconnect__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1disconnect__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1disconnect__packet.html
index 1a55ebc79..f1efed507 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1disconnect__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1disconnect__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingreq__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingreq__packet-members.html
index 002f260e2..a322c2fe6 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingreq__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingreq__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html
index 1547f92cf..cd92aaa27 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingresp__packet-members.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingresp__packet-members.html
index 2d1d2342c..7c5f9187d 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingresp__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingresp__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingresp__packet.html b/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingresp__packet.html
index fe1fd03be..7cff1ed80 100644
--- a/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingresp__packet.html
+++ b/doc/api/classasync__mqtt_1_1v3__1__1_1_1pingresp__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1auth__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1auth__packet-members.html
index f2d8e9f48..92139f78e 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1auth__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1auth__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1auth__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1auth__packet.html
index f75c8c0f0..ebeb26094 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1auth__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1auth__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__puback__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__puback__packet-members.html
index 2cf8255dc..01f08dd11 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__puback__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__puback__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__puback__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__puback__packet.html
index 26453d196..555c3775d 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__puback__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__puback__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubcomp__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubcomp__packet-members.html
index a2ef50914..3e486f283 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubcomp__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubcomp__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubcomp__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubcomp__packet.html
index 54be517e5..fbce5f1bc 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubcomp__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubcomp__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__publish__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__publish__packet-members.html
index fa8dea6ce..1c97fa343 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__publish__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__publish__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__publish__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__publish__packet.html
index b99a4075e..4de650bcc 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__publish__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__publish__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrec__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrec__packet-members.html
index 4f6244b04..657a46bd4 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrec__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrec__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrec__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrec__packet.html
index 7023944c5..14fb15a41 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrec__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrec__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrel__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrel__packet-members.html
index b441e5dbb..3e65f7cc5 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrel__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrel__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrel__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrel__packet.html
index 43825f4eb..36d84c071 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrel__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__pubrel__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__suback__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__suback__packet-members.html
index 8ec0be36c..d2eabaa1d 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__suback__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__suback__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__suback__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__suback__packet.html
index 5defbb83c..a86400c34 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__suback__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__suback__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__subscribe__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__subscribe__packet-members.html
index 36a471e50..a0b8602d3 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__subscribe__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__subscribe__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__subscribe__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__subscribe__packet.html
index b1774de27..9b2b4999f 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__subscribe__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__subscribe__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__unsuback__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__unsuback__packet-members.html
index addac9ae5..8441761f4 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__unsuback__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__unsuback__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__unsuback__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__unsuback__packet.html
index 0f98841dc..44dbf4fca 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__unsuback__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__unsuback__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__unsubscribe__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__unsubscribe__packet-members.html
index 942675455..ea5351e1e 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__unsubscribe__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__unsubscribe__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1basic__unsubscribe__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1basic__unsubscribe__packet.html
index 086ee7ae7..351616f20 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1basic__unsubscribe__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1basic__unsubscribe__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1connack__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1connack__packet-members.html
index 3026c3211..4be1cfcb6 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1connack__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1connack__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1connack__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1connack__packet.html
index 3da19d0f1..6bf9d83d8 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1connack__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1connack__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1connect__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1connect__packet-members.html
index 213e6165e..629dd92b9 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1connect__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1connect__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1connect__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1connect__packet.html
index 249d6dae5..cc1d040bb 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1connect__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1connect__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1disconnect__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1disconnect__packet-members.html
index 2af869375..06e604c25 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1disconnect__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1disconnect__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1disconnect__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1disconnect__packet.html
index 8c922e9e6..d98db926f 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1disconnect__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1disconnect__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1pingreq__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1pingreq__packet-members.html
index 3672dfaef..f1e8795f0 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1pingreq__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1pingreq__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1pingreq__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1pingreq__packet.html
index 292c85f30..78d3e4737 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1pingreq__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1pingreq__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1pingresp__packet-members.html b/doc/api/classasync__mqtt_1_1v5_1_1pingresp__packet-members.html
index 3e85c825d..af62a4dd5 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1pingresp__packet-members.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1pingresp__packet-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1v5_1_1pingresp__packet.html b/doc/api/classasync__mqtt_1_1v5_1_1pingresp__packet.html
index 2ca018660..4e7e01a04 100644
--- a/doc/api/classasync__mqtt_1_1v5_1_1pingresp__packet.html
+++ b/doc/api/classasync__mqtt_1_1v5_1_1pingresp__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1will-members.html b/doc/api/classasync__mqtt_1_1will-members.html
index d86b44525..eafc987ce 100644
--- a/doc/api/classasync__mqtt_1_1will-members.html
+++ b/doc/api/classasync__mqtt_1_1will-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classasync__mqtt_1_1will.html b/doc/api/classasync__mqtt_1_1will.html
index 32c1901fc..06b196a9d 100644
--- a/doc/api/classasync__mqtt_1_1will.html
+++ b/doc/api/classasync__mqtt_1_1will.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classes.html b/doc/api/classes.html
index 5596a503e..ee9ae1c63 100644
--- a/doc/api/classes.html
+++ b/doc/api/classes.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classstd_1_1hash_3_01async__mqtt_1_1buffer_01_4-members.html b/doc/api/classstd_1_1hash_3_01async__mqtt_1_1buffer_01_4-members.html
index 698951319..f6cef2fe6 100644
--- a/doc/api/classstd_1_1hash_3_01async__mqtt_1_1buffer_01_4-members.html
+++ b/doc/api/classstd_1_1hash_3_01async__mqtt_1_1buffer_01_4-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/classstd_1_1hash_3_01async__mqtt_1_1buffer_01_4.html b/doc/api/classstd_1_1hash_3_01async__mqtt_1_1buffer_01_4.html
index ab7262694..1e9426023 100644
--- a/doc/api/classstd_1_1hash_3_01async__mqtt_1_1buffer_01_4.html
+++ b/doc/api/classstd_1_1hash_3_01async__mqtt_1_1buffer_01_4.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/client_8hpp_source.html b/doc/api/client_8hpp_source.html
index 94a381dbd..50c7a5887 100644
--- a/doc/api/client_8hpp_source.html
+++ b/doc/api/client_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
@@ -120,346 +120,360 @@
 <div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="preprocessor">#include &lt;async_mqtt/packet/packet_id_type.hpp&gt;</span></div>
 <div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span><span class="preprocessor">#include &lt;async_mqtt/endpoint_fwd.hpp&gt;</span></div>
 <div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#include &lt;async_mqtt/detail/client_packet_type_getter.hpp&gt;</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">namespace </span>async_mqtt {</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">namespace </span>as = boost::asio;</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span><span class="keyword">template</span> &lt;protocol_version Version, <span class="keyword">typename</span> NextLayer&gt;</div>
-<div class="foldopen" id="foldopen00081" data-start="{" data-end="};">
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html">   81</a></span><span class="keyword">class </span><a class="code hl_class" href="classasync__mqtt_1_1client.html">client</a> {</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>    <span class="keyword">using </span><a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a> = <a class="code hl_class" href="classasync__mqtt_1_1client.html">client&lt;Version, NextLayer&gt;</a>;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span> </div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span><span class="keyword">public</span>:</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a4eaa1645f73cbdc77125db56b09bd309">   86</a></span>    <span class="keyword">using </span><a class="code hl_class" href="classasync__mqtt_1_1basic__endpoint.html">endpoint_type</a> = <a class="code hl_class" href="classasync__mqtt_1_1basic__endpoint.html">basic_endpoint&lt;role::client, 2, NextLayer&gt;</a>;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">   89</a></span>    <span class="keyword">using </span><a class="code hl_typedef" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">next_layer_type</a> = <span class="keyword">typename</span> <a class="code hl_typedef" href="classasync__mqtt_1_1basic__endpoint.html#af485b15270d8b1e12746342d4f79cb15">endpoint_type::next_layer_type</a>;</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span> </div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">   92</a></span>    <span class="keyword">using </span><a class="code hl_typedef" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">lowest_layer_type</a> = <span class="keyword">typename</span> <a class="code hl_typedef" href="classasync__mqtt_1_1basic__endpoint.html#ac6d52c82d975d51c9f08627abbf8dec7">endpoint_type::lowest_layer_type</a>;</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span> </div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d">   95</a></span>    <span class="keyword">using </span><a class="code hl_typedef" href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d">executor_type</a> = <span class="keyword">typename</span> <a class="code hl_typedef" href="classasync__mqtt_1_1basic__endpoint.html#a631e1e2d54cfc10767b1d8c29639441d">endpoint_type::executor_type</a>;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span> </div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4ab640a0ce465fa2a4150c36b305c1c11b">connect</a>)</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4afae41652874a4576f7aa845273c2df77">connack</a>)</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a4f893ee24950069dd823e083338a456d">subscribe</a>)</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4ad489cb9c3245a5fa1b6e93310da6dd77">suback</a>)</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4aa013658e30387f7a60cdaf0acf26850d">unsubscribe</a>)</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a5966bddbb7977ef270927bbbb04ba3bc">unsuback</a>)</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a9b6d0bb3102b87fae57bc4a39149518e">publish</a>)</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a435085db69f4654e88b811b47cfef414">puback</a>)</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4abf2cc1e95ca55f9ec0fc548be41acff2">pubrec</a>)</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a9df92f61dc94c0e6f6655b78bd14bbe8">pubrel</a>)</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a1759db7690c85cd9364289212d132e61">pubcomp</a>)</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4ade8de1ea16b86f9f4452bc58259014e8">pingreq</a>)</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4aa3f05826179f9fbdc3915b62aea1ae12">pingresp</a>)</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a9d634e1a156dc0c1611eb4c3cff57276">disconnect</a>)</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span> </div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>    </div>
-<div class="foldopen" id="foldopen00115" data-start="{" data-end="};">
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1pubres__type.html">  115</a></span>    struct <a class="code hl_struct" href="structasync__mqtt_1_1client_1_1pubres__type.html">pubres_type</a> {</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1pubres__type.html#adbf276995037034b6a8ea247bd35b53a">  119</a></span>        std::optional&lt;puback_packet&gt; <a class="code hl_variable" href="structasync__mqtt_1_1client_1_1pubres__type.html#adbf276995037034b6a8ea247bd35b53a">puback_opt</a>;</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1pubres__type.html#a2236be9c48a3a879ceb1fc3b36e14ffc">  123</a></span>        std::optional&lt;pubrec_packet&gt; <a class="code hl_variable" href="structasync__mqtt_1_1client_1_1pubres__type.html#a2236be9c48a3a879ceb1fc3b36e14ffc">pubrec_opt</a>;</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1pubres__type.html#ac421d7d122a64ae87537f85dc9faaf15">  127</a></span>        std::optional&lt;pubcomp_packet&gt; <a class="code hl_variable" href="structasync__mqtt_1_1client_1_1pubres__type.html#ac421d7d122a64ae87537f85dc9faaf15">pubcomp_opt</a>;</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>    };</div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#include &lt;async_mqtt/util/make_shared_helper.hpp&gt;</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">namespace </span>async_mqtt {</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keyword">namespace </span>as = boost::asio;</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span><span class="keyword">template</span> &lt;protocol_version Version, <span class="keyword">typename</span> NextLayer&gt;</div>
+<div class="foldopen" id="foldopen00082" data-start="{" data-end="};">
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html">   82</a></span><span class="keyword">class </span><a class="code hl_class" href="classasync__mqtt_1_1client.html">client</a> : <span class="keyword">public</span> std::enable_shared_from_this&lt;client&lt;Version, NextLayer&gt;&gt; {</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>    <span class="keyword">using </span><a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a> = <a class="code hl_class" href="classasync__mqtt_1_1client.html">client&lt;Version, NextLayer&gt;</a>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>    <span class="keyword">using </span>this_type_sp = std::shared_ptr&lt;this_type&gt;;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>    <span class="keyword">friend</span> <span class="keyword">class </span>make_shared_helper;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a4eaa1645f73cbdc77125db56b09bd309">   91</a></span>    <span class="keyword">using </span><a class="code hl_class" href="classasync__mqtt_1_1basic__endpoint.html">endpoint_type</a> = <a class="code hl_class" href="classasync__mqtt_1_1basic__endpoint.html">basic_endpoint&lt;role::client, 2, NextLayer&gt;</a>;</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">   94</a></span>    <span class="keyword">using </span><a class="code hl_typedef" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">next_layer_type</a> = <span class="keyword">typename</span> <a class="code hl_typedef" href="classasync__mqtt_1_1basic__endpoint.html#af485b15270d8b1e12746342d4f79cb15">endpoint_type::next_layer_type</a>;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">   97</a></span>    <span class="keyword">using </span><a class="code hl_typedef" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">lowest_layer_type</a> = <span class="keyword">typename</span> <a class="code hl_typedef" href="classasync__mqtt_1_1basic__endpoint.html#ac6d52c82d975d51c9f08627abbf8dec7">endpoint_type::lowest_layer_type</a>;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d">  100</a></span>    <span class="keyword">using </span><a class="code hl_typedef" href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d">executor_type</a> = <span class="keyword">typename</span> <a class="code hl_typedef" href="classasync__mqtt_1_1basic__endpoint.html#a631e1e2d54cfc10767b1d8c29639441d">endpoint_type::executor_type</a>;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4ab640a0ce465fa2a4150c36b305c1c11b">connect</a>)</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4afae41652874a4576f7aa845273c2df77">connack</a>)</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a4f893ee24950069dd823e083338a456d">subscribe</a>)</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4ad489cb9c3245a5fa1b6e93310da6dd77">suback</a>)</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4aa013658e30387f7a60cdaf0acf26850d">unsubscribe</a>)</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a5966bddbb7977ef270927bbbb04ba3bc">unsuback</a>)</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a9b6d0bb3102b87fae57bc4a39149518e">publish</a>)</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a435085db69f4654e88b811b47cfef414">puback</a>)</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4abf2cc1e95ca55f9ec0fc548be41acff2">pubrec</a>)</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a9df92f61dc94c0e6f6655b78bd14bbe8">pubrel</a>)</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a1759db7690c85cd9364289212d132e61">pubcomp</a>)</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4ade8de1ea16b86f9f4452bc58259014e8">pingreq</a>)</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4aa3f05826179f9fbdc3915b62aea1ae12">pingresp</a>)</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>    ASYNC_MQTT_PACKET_TYPE(Version, <a class="code hl_enumvalue" href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4a9d634e1a156dc0c1611eb4c3cff57276">disconnect</a>)</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>    </div>
+<div class="foldopen" id="foldopen00120" data-start="{" data-end="};">
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1pubres__type.html">  120</a></span>    struct <a class="code hl_struct" href="structasync__mqtt_1_1client_1_1pubres__type.html">pubres_type</a> {</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1pubres__type.html#adbf276995037034b6a8ea247bd35b53a">  124</a></span>        std::optional&lt;puback_packet&gt; <a class="code hl_variable" href="structasync__mqtt_1_1client_1_1pubres__type.html#adbf276995037034b6a8ea247bd35b53a">puback_opt</a>;</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1pubres__type.html#a2236be9c48a3a879ceb1fc3b36e14ffc">  128</a></span>        std::optional&lt;pubrec_packet&gt; <a class="code hl_variable" href="structasync__mqtt_1_1client_1_1pubres__type.html#a2236be9c48a3a879ceb1fc3b36e14ffc">pubrec_opt</a>;</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1pubres__type.html#ac421d7d122a64ae87537f85dc9faaf15">  132</a></span>        std::optional&lt;pubcomp_packet&gt; <a class="code hl_variable" href="structasync__mqtt_1_1client_1_1pubres__type.html#ac421d7d122a64ae87537f85dc9faaf15">pubcomp_opt</a>;</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>    };</div>
 </div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span> </div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>    <span class="keyword">explicit</span></div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df">  142</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df">client</a>(</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>        Args&amp;&amp;... args</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span>    );</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Other&gt;</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>    <span class="keyword">explicit</span></div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f">  153</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f">client</a>(</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span>        <a class="code hl_class" href="classasync__mqtt_1_1client.html">client&lt;Version, Other&gt;</a>&amp;&amp; other</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>    );</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span> </div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69">  160</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69">client</a>(<a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70">  165</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70">client</a>(<a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a>&amp;&amp;) = <span class="keywordflow">default</span>;</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span> </div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806">  170</a></span>    <a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806">operator=</a>(<a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span> </div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d">  175</a></span>    <a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d">operator=</a>(<a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a>&amp;&amp;) = <span class="keywordflow">default</span>;</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span> </div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a6808a6f7f9535ec152dcc9ee430caf92">  222</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a6808a6f7f9535ec152dcc9ee430caf92">async_start</a>(Args&amp;&amp;... args);</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span> </div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a10936f4e6d279d8fd869c6774f65dbaf">  269</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a10936f4e6d279d8fd869c6774f65dbaf">async_subscribe</a>(Args&amp;&amp;... args);</div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span> </div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7">  316</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7">async_unsubscribe</a>(Args&amp;&amp;... args);</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span> </div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aea02e31d5f8e45f5eb7eb886f7a5068a">  365</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#aea02e31d5f8e45f5eb7eb886f7a5068a">async_publish</a>(Args&amp;&amp;... args);</div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span> </div>
-<div class="line"><a id="l00395" name="l00395"></a><span class="lineno">  395</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
-<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e">  396</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e">async_disconnect</a>(Args&amp;&amp;... args);</div>
-<div class="line"><a id="l00397" name="l00397"></a><span class="lineno">  397</span> </div>
-<div class="line"><a id="l00425" name="l00425"></a><span class="lineno">  425</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a9920aeeb283f6ff9a9eb164a52f1eb5c">  426</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a9920aeeb283f6ff9a9eb164a52f1eb5c">async_auth</a>(Args&amp;&amp;... args);</div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno">  427</span> </div>
-<div class="line"><a id="l00439" name="l00439"></a><span class="lineno">  439</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00440" name="l00440"></a><span class="lineno">  440</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00441" name="l00441"></a><span class="lineno">  441</span>    &gt;</div>
-<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00444" name="l00444"></a><span class="lineno">  444</span>        CompletionToken,</div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span>        <span class="keywordtype">void</span>()</div>
-<div class="line"><a id="l00446" name="l00446"></a><span class="lineno">  446</span>    )</div>
-<div class="line"><a id="l00447" name="l00447"></a><span class="lineno">  447</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110">  448</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110">async_close</a>(</div>
-<div class="line"><a id="l00449" name="l00449"></a><span class="lineno">  449</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00450" name="l00450"></a><span class="lineno">  450</span>    );</div>
-<div class="line"><a id="l00451" name="l00451"></a><span class="lineno">  451</span> </div>
-<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00474" name="l00474"></a><span class="lineno">  474</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00475" name="l00475"></a><span class="lineno">  475</span>    &gt;</div>
-<div class="line"><a id="l00476" name="l00476"></a><span class="lineno">  476</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00477" name="l00477"></a><span class="lineno">  477</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00478" name="l00478"></a><span class="lineno">  478</span>        CompletionToken,</div>
-<div class="line"><a id="l00479" name="l00479"></a><span class="lineno">  479</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, packet_variant)</div>
-<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>    )</div>
-<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a825c14790ca009436f20c1b2c7952204">  482</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a825c14790ca009436f20c1b2c7952204">async_recv</a>(</div>
-<div class="line"><a id="l00483" name="l00483"></a><span class="lineno">  483</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00484" name="l00484"></a><span class="lineno">  484</span>    );</div>
-<div class="line"><a id="l00485" name="l00485"></a><span class="lineno">  485</span> </div>
-<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825">  490</a></span>    as::any_io_executor <a class="code hl_function" href="classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825">get_executor</a>() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00491" name="l00491"></a><span class="lineno">  491</span> </div>
-<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a243692c7f749de1b589c665401a5b43a">  496</a></span>    <a class="code hl_typedef" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">next_layer_type</a> <span class="keyword">const</span>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a243692c7f749de1b589c665401a5b43a">next_layer</a>() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00497" name="l00497"></a><span class="lineno">  497</span> </div>
-<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28">  502</a></span>    <a class="code hl_typedef" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">next_layer_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28">next_layer</a>();</div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span> </div>
-<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158">  508</a></span>    <a class="code hl_typedef" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">lowest_layer_type</a> <span class="keyword">const</span>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158">lowest_layer</a>() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00509" name="l00509"></a><span class="lineno">  509</span> </div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f">  514</a></span>    <a class="code hl_typedef" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">lowest_layer_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f">lowest_layer</a>();</div>
-<div class="line"><a id="l00515" name="l00515"></a><span class="lineno">  515</span> </div>
-<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d">  521</a></span>    <a class="code hl_class" href="classasync__mqtt_1_1basic__endpoint.html">endpoint_type</a> <span class="keyword">const</span>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d">get_endpoint</a>() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00522" name="l00522"></a><span class="lineno">  522</span> </div>
-<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a53ecf68e9242a4355251ad8abbbebd93">  528</a></span>    <a class="code hl_class" href="classasync__mqtt_1_1basic__endpoint.html">endpoint_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a53ecf68e9242a4355251ad8abbbebd93">get_endpoint</a>();</div>
-<div class="line"><a id="l00529" name="l00529"></a><span class="lineno">  529</span> </div>
-<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a565335cdfde52860dcfcb483624b6b7e">  537</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a565335cdfde52860dcfcb483624b6b7e">set_auto_map_topic_alias_send</a>(<span class="keywordtype">bool</span> val);</div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno">  538</span> </div>
-<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2">  546</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2">set_auto_replace_topic_alias_send</a>(<span class="keywordtype">bool</span> val);</div>
-<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span> </div>
-<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7">  557</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7">set_pingresp_recv_timeout_ms</a>(std::size_t ms);</div>
-<div class="line"><a id="l00558" name="l00558"></a><span class="lineno">  558</span> </div>
-<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649">  568</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649">set_bulk_write</a>(<span class="keywordtype">bool</span> val);</div>
-<div class="line"><a id="l00569" name="l00569"></a><span class="lineno">  569</span> </div>
-<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf">  580</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf">set_bulk_read_buffer_size</a>(std::size_t val);</div>
-<div class="line"><a id="l00581" name="l00581"></a><span class="lineno">  581</span> </div>
-<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00599" name="l00599"></a><span class="lineno">  599</span>    &gt;</div>
-<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00601" name="l00601"></a><span class="lineno">  601</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00602" name="l00602"></a><span class="lineno">  602</span>        CompletionToken,</div>
-<div class="line"><a id="l00603" name="l00603"></a><span class="lineno">  603</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, <a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a>)</div>
-<div class="line"><a id="l00604" name="l00604"></a><span class="lineno">  604</span>    )</div>
-<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ae866b887888316e02f14487ec2892a23">  606</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#ae866b887888316e02f14487ec2892a23">async_acquire_unique_packet_id</a>(</div>
-<div class="line"><a id="l00607" name="l00607"></a><span class="lineno">  607</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00608" name="l00608"></a><span class="lineno">  608</span>    );</div>
-<div class="line"><a id="l00609" name="l00609"></a><span class="lineno">  609</span> </div>
-<div class="line"><a id="l00626" name="l00626"></a><span class="lineno">  626</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00628" name="l00628"></a><span class="lineno">  628</span>    &gt;</div>
-<div class="line"><a id="l00629" name="l00629"></a><span class="lineno">  629</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00630" name="l00630"></a><span class="lineno">  630</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00631" name="l00631"></a><span class="lineno">  631</span>        CompletionToken,</div>
-<div class="line"><a id="l00632" name="l00632"></a><span class="lineno">  632</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, <a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a>)</div>
-<div class="line"><a id="l00633" name="l00633"></a><span class="lineno">  633</span>    )</div>
-<div class="line"><a id="l00634" name="l00634"></a><span class="lineno">  634</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a107f857b734a01cfeb6f8fc7894e60f1">  635</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a107f857b734a01cfeb6f8fc7894e60f1">async_acquire_unique_packet_id_wait_until</a>(</div>
-<div class="line"><a id="l00636" name="l00636"></a><span class="lineno">  636</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00637" name="l00637"></a><span class="lineno">  637</span>    );</div>
-<div class="line"><a id="l00638" name="l00638"></a><span class="lineno">  638</span> </div>
-<div class="line"><a id="l00656" name="l00656"></a><span class="lineno">  656</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00657" name="l00657"></a><span class="lineno">  657</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00658" name="l00658"></a><span class="lineno">  658</span>    &gt;</div>
-<div class="line"><a id="l00659" name="l00659"></a><span class="lineno">  659</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00660" name="l00660"></a><span class="lineno">  660</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00661" name="l00661"></a><span class="lineno">  661</span>        CompletionToken,</div>
-<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>)</div>
-<div class="line"><a id="l00663" name="l00663"></a><span class="lineno">  663</span>    )</div>
-<div class="line"><a id="l00664" name="l00664"></a><span class="lineno">  664</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#acbe876628df6963609eb6e9aa4a0729e">  665</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#acbe876628df6963609eb6e9aa4a0729e">async_register_packet_id</a>(</div>
-<div class="line"><a id="l00666" name="l00666"></a><span class="lineno">  666</span>        <a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id,</div>
-<div class="line"><a id="l00667" name="l00667"></a><span class="lineno">  667</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00668" name="l00668"></a><span class="lineno">  668</span>    );</div>
-<div class="line"><a id="l00669" name="l00669"></a><span class="lineno">  669</span> </div>
-<div class="line"><a id="l00686" name="l00686"></a><span class="lineno">  686</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00687" name="l00687"></a><span class="lineno">  687</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00688" name="l00688"></a><span class="lineno">  688</span>    &gt;</div>
-<div class="line"><a id="l00689" name="l00689"></a><span class="lineno">  689</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00690" name="l00690"></a><span class="lineno">  690</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00691" name="l00691"></a><span class="lineno">  691</span>        CompletionToken,</div>
-<div class="line"><a id="l00692" name="l00692"></a><span class="lineno">  692</span>        <span class="keywordtype">void</span>()</div>
-<div class="line"><a id="l00693" name="l00693"></a><span class="lineno">  693</span>    )</div>
-<div class="line"><a id="l00694" name="l00694"></a><span class="lineno">  694</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a2574049a028672d01dcb4a49d80dec27">  695</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a2574049a028672d01dcb4a49d80dec27">async_release_packet_id</a>(</div>
-<div class="line"><a id="l00696" name="l00696"></a><span class="lineno">  696</span>        <a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id,</div>
-<div class="line"><a id="l00697" name="l00697"></a><span class="lineno">  697</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00698" name="l00698"></a><span class="lineno">  698</span>    );</div>
-<div class="line"><a id="l00699" name="l00699"></a><span class="lineno">  699</span> </div>
-<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ab160ebb19bd7e51f8460e59a88deff86">  704</a></span>    std::optional&lt;packet_id_type&gt; <a class="code hl_function" href="classasync__mqtt_1_1client.html#ab160ebb19bd7e51f8460e59a88deff86">acquire_unique_packet_id</a>();</div>
-<div class="line"><a id="l00705" name="l00705"></a><span class="lineno">  705</span> </div>
-<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc">  711</a></span>    <span class="keywordtype">bool</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc">register_packet_id</a>(<a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id);</div>
-<div class="line"><a id="l00712" name="l00712"></a><span class="lineno">  712</span> </div>
-<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2">  717</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2">release_packet_id</a>(<a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id);</div>
-<div class="line"><a id="l00718" name="l00718"></a><span class="lineno">  718</span> </div>
-<div class="line"><a id="l00722" name="l00722"></a><span class="lineno">  722</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Executor1&gt;</div>
-<div class="foldopen" id="foldopen00723" data-start="{" data-end="};">
-<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1rebind__executor.html">  723</a></span>    <span class="keyword">struct </span><a class="code hl_struct" href="structasync__mqtt_1_1client_1_1rebind__executor.html">rebind_executor</a> {</div>
-<div class="line"><a id="l00724" name="l00724"></a><span class="lineno">  724</span>        <span class="keyword">using </span><a class="code hl_class" href="classasync__mqtt_1_1client.html">other</a> = <a class="code hl_class" href="classasync__mqtt_1_1client.html">client</a>&lt;</div>
-<div class="line"><a id="l00725" name="l00725"></a><span class="lineno">  725</span>            Version,</div>
-<div class="line"><a id="l00726" name="l00726"></a><span class="lineno">  726</span>            <span class="keyword">typename</span> NextLayer::template <a class="code hl_class" href="classasync__mqtt_1_1client.html">rebind_executor&lt;Executor1&gt;::other</a></div>
-<div class="line"><a id="l00727" name="l00727"></a><span class="lineno">  727</span>        &gt;;</div>
-<div class="line"><a id="l00728" name="l00728"></a><span class="lineno">  728</span>    };</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="foldopen" id="foldopen00147" data-start="{" data-end="}">
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41">  147</a></span>    <span class="keyword">static</span> std::shared_ptr&lt;this_type&gt; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41">create</a>(</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>        Args&amp;&amp;... args</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>    ) {</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>        <span class="keywordflow">return</span> make_shared_helper&lt;this_type&gt;::make_shared(std::forward&lt;Args&gt;(args)...);</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>    }</div>
 </div>
-<div class="line"><a id="l00729" name="l00729"></a><span class="lineno">  729</span> </div>
-<div class="line"><a id="l00730" name="l00730"></a><span class="lineno">  730</span><span class="keyword">private</span>:</div>
-<div class="line"><a id="l00731" name="l00731"></a><span class="lineno">  731</span> </div>
-<div class="line"><a id="l00732" name="l00732"></a><span class="lineno">  732</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00733" name="l00733"></a><span class="lineno">  733</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00734" name="l00734"></a><span class="lineno">  734</span>    &gt;</div>
-<div class="line"><a id="l00735" name="l00735"></a><span class="lineno">  735</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00736" name="l00736"></a><span class="lineno">  736</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00737" name="l00737"></a><span class="lineno">  737</span>        CompletionToken,</div>
-<div class="line"><a id="l00738" name="l00738"></a><span class="lineno">  738</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, std::optional&lt;connack_packet&gt;)</div>
-<div class="line"><a id="l00739" name="l00739"></a><span class="lineno">  739</span>    )</div>
-<div class="line"><a id="l00740" name="l00740"></a><span class="lineno">  740</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00741" name="l00741"></a><span class="lineno">  741</span>    async_start_impl(</div>
-<div class="line"><a id="l00742" name="l00742"></a><span class="lineno">  742</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
-<div class="line"><a id="l00743" name="l00743"></a><span class="lineno">  743</span>        std::optional&lt;connect_packet&gt; packet,</div>
-<div class="line"><a id="l00744" name="l00744"></a><span class="lineno">  744</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00745" name="l00745"></a><span class="lineno">  745</span>    );</div>
-<div class="line"><a id="l00746" name="l00746"></a><span class="lineno">  746</span> </div>
-<div class="line"><a id="l00747" name="l00747"></a><span class="lineno">  747</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00748" name="l00748"></a><span class="lineno">  748</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00749" name="l00749"></a><span class="lineno">  749</span>    &gt;</div>
-<div class="line"><a id="l00750" name="l00750"></a><span class="lineno">  750</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00751" name="l00751"></a><span class="lineno">  751</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00752" name="l00752"></a><span class="lineno">  752</span>        CompletionToken,</div>
-<div class="line"><a id="l00753" name="l00753"></a><span class="lineno">  753</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, std::optional&lt;suback_packet&gt;)</div>
-<div class="line"><a id="l00754" name="l00754"></a><span class="lineno">  754</span>    )</div>
-<div class="line"><a id="l00755" name="l00755"></a><span class="lineno">  755</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00756" name="l00756"></a><span class="lineno">  756</span>    async_subscribe_impl(</div>
-<div class="line"><a id="l00757" name="l00757"></a><span class="lineno">  757</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
-<div class="line"><a id="l00758" name="l00758"></a><span class="lineno">  758</span>        std::optional&lt;subscribe_packet&gt; packet,</div>
-<div class="line"><a id="l00759" name="l00759"></a><span class="lineno">  759</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00760" name="l00760"></a><span class="lineno">  760</span>    );</div>
-<div class="line"><a id="l00761" name="l00761"></a><span class="lineno">  761</span> </div>
-<div class="line"><a id="l00762" name="l00762"></a><span class="lineno">  762</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00763" name="l00763"></a><span class="lineno">  763</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00764" name="l00764"></a><span class="lineno">  764</span>    &gt;</div>
-<div class="line"><a id="l00765" name="l00765"></a><span class="lineno">  765</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00766" name="l00766"></a><span class="lineno">  766</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00767" name="l00767"></a><span class="lineno">  767</span>        CompletionToken,</div>
-<div class="line"><a id="l00768" name="l00768"></a><span class="lineno">  768</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, std::optional&lt;suback_packet&gt;)</div>
-<div class="line"><a id="l00769" name="l00769"></a><span class="lineno">  769</span>    )</div>
-<div class="line"><a id="l00770" name="l00770"></a><span class="lineno">  770</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00771" name="l00771"></a><span class="lineno">  771</span>    async_unsubscribe_impl(</div>
-<div class="line"><a id="l00772" name="l00772"></a><span class="lineno">  772</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
-<div class="line"><a id="l00773" name="l00773"></a><span class="lineno">  773</span>        std::optional&lt;unsubscribe_packet&gt; packet,</div>
-<div class="line"><a id="l00774" name="l00774"></a><span class="lineno">  774</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00775" name="l00775"></a><span class="lineno">  775</span>    );</div>
-<div class="line"><a id="l00776" name="l00776"></a><span class="lineno">  776</span> </div>
-<div class="line"><a id="l00777" name="l00777"></a><span class="lineno">  777</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00778" name="l00778"></a><span class="lineno">  778</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00779" name="l00779"></a><span class="lineno">  779</span>    &gt;</div>
-<div class="line"><a id="l00780" name="l00780"></a><span class="lineno">  780</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00781" name="l00781"></a><span class="lineno">  781</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00782" name="l00782"></a><span class="lineno">  782</span>        CompletionToken,</div>
-<div class="line"><a id="l00783" name="l00783"></a><span class="lineno">  783</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, pubres_type)</div>
-<div class="line"><a id="l00784" name="l00784"></a><span class="lineno">  784</span>    )</div>
-<div class="line"><a id="l00785" name="l00785"></a><span class="lineno">  785</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00786" name="l00786"></a><span class="lineno">  786</span>    async_publish_impl(</div>
-<div class="line"><a id="l00787" name="l00787"></a><span class="lineno">  787</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
-<div class="line"><a id="l00788" name="l00788"></a><span class="lineno">  788</span>        std::optional&lt;publish_packet&gt; packet,</div>
-<div class="line"><a id="l00789" name="l00789"></a><span class="lineno">  789</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00790" name="l00790"></a><span class="lineno">  790</span>    );</div>
-<div class="line"><a id="l00791" name="l00791"></a><span class="lineno">  791</span> </div>
-<div class="line"><a id="l00792" name="l00792"></a><span class="lineno">  792</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00793" name="l00793"></a><span class="lineno">  793</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00794" name="l00794"></a><span class="lineno">  794</span>    &gt;</div>
-<div class="line"><a id="l00795" name="l00795"></a><span class="lineno">  795</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00796" name="l00796"></a><span class="lineno">  796</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00797" name="l00797"></a><span class="lineno">  797</span>        CompletionToken,</div>
-<div class="line"><a id="l00798" name="l00798"></a><span class="lineno">  798</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>)</div>
-<div class="line"><a id="l00799" name="l00799"></a><span class="lineno">  799</span>    )</div>
-<div class="line"><a id="l00800" name="l00800"></a><span class="lineno">  800</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00801" name="l00801"></a><span class="lineno">  801</span>    async_disconnect_impl(</div>
-<div class="line"><a id="l00802" name="l00802"></a><span class="lineno">  802</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
-<div class="line"><a id="l00803" name="l00803"></a><span class="lineno">  803</span>        std::optional&lt;disconnect_packet&gt; packet,</div>
-<div class="line"><a id="l00804" name="l00804"></a><span class="lineno">  804</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00805" name="l00805"></a><span class="lineno">  805</span>    );</div>
-<div class="line"><a id="l00806" name="l00806"></a><span class="lineno">  806</span> </div>
-<div class="line"><a id="l00807" name="l00807"></a><span class="lineno">  807</span>    <span class="keyword">template</span> &lt;</div>
-<div class="line"><a id="l00808" name="l00808"></a><span class="lineno">  808</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
-<div class="line"><a id="l00809" name="l00809"></a><span class="lineno">  809</span>    &gt;</div>
-<div class="line"><a id="l00810" name="l00810"></a><span class="lineno">  810</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00811" name="l00811"></a><span class="lineno">  811</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
-<div class="line"><a id="l00812" name="l00812"></a><span class="lineno">  812</span>        CompletionToken,</div>
-<div class="line"><a id="l00813" name="l00813"></a><span class="lineno">  813</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>)</div>
-<div class="line"><a id="l00814" name="l00814"></a><span class="lineno">  814</span>    )</div>
-<div class="line"><a id="l00815" name="l00815"></a><span class="lineno">  815</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
-<div class="line"><a id="l00816" name="l00816"></a><span class="lineno">  816</span>    async_auth_impl(</div>
-<div class="line"><a id="l00817" name="l00817"></a><span class="lineno">  817</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
-<div class="line"><a id="l00818" name="l00818"></a><span class="lineno">  818</span>        std::optional&lt;v5::auth_packet&gt; packet,</div>
-<div class="line"><a id="l00819" name="l00819"></a><span class="lineno">  819</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
-<div class="line"><a id="l00820" name="l00820"></a><span class="lineno">  820</span>    );</div>
-<div class="line"><a id="l00821" name="l00821"></a><span class="lineno">  821</span> </div>
-<div class="line"><a id="l00822" name="l00822"></a><span class="lineno">  822</span>    <span class="keywordtype">void</span> recv_loop();</div>
-<div class="line"><a id="l00823" name="l00823"></a><span class="lineno">  823</span> </div>
-<div class="line"><a id="l00824" name="l00824"></a><span class="lineno">  824</span>    <span class="comment">// async operations</span></div>
-<div class="line"><a id="l00825" name="l00825"></a><span class="lineno">  825</span>    <span class="keyword">struct </span>start_op;</div>
-<div class="line"><a id="l00826" name="l00826"></a><span class="lineno">  826</span>    <span class="keyword">struct </span>subscribe_op;</div>
-<div class="line"><a id="l00827" name="l00827"></a><span class="lineno">  827</span>    <span class="keyword">struct </span>unsubscribe_op;</div>
-<div class="line"><a id="l00828" name="l00828"></a><span class="lineno">  828</span>    <span class="keyword">struct </span>publish_op;</div>
-<div class="line"><a id="l00829" name="l00829"></a><span class="lineno">  829</span>    <span class="keyword">struct </span>disconnect_op;</div>
-<div class="line"><a id="l00830" name="l00830"></a><span class="lineno">  830</span>    <span class="keyword">struct </span>auth_op;</div>
-<div class="line"><a id="l00831" name="l00831"></a><span class="lineno">  831</span>    <span class="keyword">struct </span>recv_op;</div>
-<div class="line"><a id="l00832" name="l00832"></a><span class="lineno">  832</span> </div>
-<div class="line"><a id="l00833" name="l00833"></a><span class="lineno">  833</span>    <span class="comment">// internal types</span></div>
-<div class="line"><a id="l00834" name="l00834"></a><span class="lineno">  834</span>    <span class="keyword">struct </span>pid_tim_pv_res_col;</div>
-<div class="line"><a id="l00835" name="l00835"></a><span class="lineno">  835</span>    <span class="keyword">struct </span>recv_type;</div>
-<div class="line"><a id="l00836" name="l00836"></a><span class="lineno">  836</span> </div>
-<div class="line"><a id="l00837" name="l00837"></a><span class="lineno">  837</span>    <span class="keyword">using </span>endpoint_type_sp = std::shared_ptr&lt;endpoint_type&gt;;</div>
-<div class="line"><a id="l00838" name="l00838"></a><span class="lineno">  838</span> </div>
-<div class="line"><a id="l00839" name="l00839"></a><span class="lineno">  839</span>    endpoint_type_sp ep_;</div>
-<div class="line"><a id="l00840" name="l00840"></a><span class="lineno">  840</span>    pid_tim_pv_res_col pid_tim_pv_res_col_;</div>
-<div class="line"><a id="l00841" name="l00841"></a><span class="lineno">  841</span>    std::deque&lt;recv_type&gt; recv_queue_;</div>
-<div class="line"><a id="l00842" name="l00842"></a><span class="lineno">  842</span>    <span class="keywordtype">bool</span> recv_queue_inserted_ = <span class="keyword">false</span>;</div>
-<div class="line"><a id="l00843" name="l00843"></a><span class="lineno">  843</span>    as::steady_timer tim_notify_publish_recv_;</div>
-<div class="line"><a id="l00844" name="l00844"></a><span class="lineno">  844</span>};</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69">  156</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69">client</a>(<a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70">  161</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70">client</a>(<a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a>&amp;&amp;) = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806">  166</a></span>    <a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806">operator=</a>(<a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d">  171</a></span>    <a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d">operator=</a>(<a class="code hl_class" href="classasync__mqtt_1_1client.html">this_type</a>&amp;&amp;) = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a6808a6f7f9535ec152dcc9ee430caf92">  218</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a6808a6f7f9535ec152dcc9ee430caf92">async_start</a>(Args&amp;&amp;... args);</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a10936f4e6d279d8fd869c6774f65dbaf">  265</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a10936f4e6d279d8fd869c6774f65dbaf">async_subscribe</a>(Args&amp;&amp;... args);</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7">  312</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7">async_unsubscribe</a>(Args&amp;&amp;... args);</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno">  360</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aea02e31d5f8e45f5eb7eb886f7a5068a">  361</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#aea02e31d5f8e45f5eb7eb886f7a5068a">async_publish</a>(Args&amp;&amp;... args);</div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e">  392</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e">async_disconnect</a>(Args&amp;&amp;... args);</div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno">  421</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a9920aeeb283f6ff9a9eb164a52f1eb5c">  422</a></span>    <span class="keyword">auto</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a9920aeeb283f6ff9a9eb164a52f1eb5c">async_auth</a>(Args&amp;&amp;... args);</div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno">  435</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno">  436</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno">  437</span>    &gt;</div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno">  438</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno">  439</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno">  440</span>        CompletionToken,</div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno">  441</span>        <span class="keywordtype">void</span>()</div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span>    )</div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110">  444</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110">async_close</a>(</div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00446" name="l00446"></a><span class="lineno">  446</span>    );</div>
+<div class="line"><a id="l00447" name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno">  469</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00471" name="l00471"></a><span class="lineno">  471</span>    &gt;</div>
+<div class="line"><a id="l00472" name="l00472"></a><span class="lineno">  472</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00474" name="l00474"></a><span class="lineno">  474</span>        CompletionToken,</div>
+<div class="line"><a id="l00475" name="l00475"></a><span class="lineno">  475</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, packet_variant)</div>
+<div class="line"><a id="l00476" name="l00476"></a><span class="lineno">  476</span>    )</div>
+<div class="line"><a id="l00477" name="l00477"></a><span class="lineno">  477</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a825c14790ca009436f20c1b2c7952204">  478</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a825c14790ca009436f20c1b2c7952204">async_recv</a>(</div>
+<div class="line"><a id="l00479" name="l00479"></a><span class="lineno">  479</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>    );</div>
+<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825">  486</a></span>    as::any_io_executor <a class="code hl_function" href="classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825">get_executor</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00487" name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a243692c7f749de1b589c665401a5b43a">  492</a></span>    <a class="code hl_typedef" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">next_layer_type</a> <span class="keyword">const</span>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a243692c7f749de1b589c665401a5b43a">next_layer</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00493" name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28">  498</a></span>    <a class="code hl_typedef" href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">next_layer_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28">next_layer</a>();</div>
+<div class="line"><a id="l00499" name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158">  504</a></span>    <a class="code hl_typedef" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">lowest_layer_type</a> <span class="keyword">const</span>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158">lowest_layer</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00505" name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f">  510</a></span>    <a class="code hl_typedef" href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">lowest_layer_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f">lowest_layer</a>();</div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d">  517</a></span>    <a class="code hl_class" href="classasync__mqtt_1_1basic__endpoint.html">endpoint_type</a> <span class="keyword">const</span>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d">get_endpoint</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00518" name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a53ecf68e9242a4355251ad8abbbebd93">  524</a></span>    <a class="code hl_class" href="classasync__mqtt_1_1basic__endpoint.html">endpoint_type</a>&amp; <a class="code hl_function" href="classasync__mqtt_1_1client.html#a53ecf68e9242a4355251ad8abbbebd93">get_endpoint</a>();</div>
+<div class="line"><a id="l00525" name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a565335cdfde52860dcfcb483624b6b7e">  533</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a565335cdfde52860dcfcb483624b6b7e">set_auto_map_topic_alias_send</a>(<span class="keywordtype">bool</span> val);</div>
+<div class="line"><a id="l00534" name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2">  542</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2">set_auto_replace_topic_alias_send</a>(<span class="keywordtype">bool</span> val);</div>
+<div class="line"><a id="l00543" name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7">  553</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7">set_pingresp_recv_timeout_ms</a>(std::size_t ms);</div>
+<div class="line"><a id="l00554" name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649">  564</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649">set_bulk_write</a>(<span class="keywordtype">bool</span> val);</div>
+<div class="line"><a id="l00565" name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf">  576</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf">set_bulk_read_buffer_size</a>(std::size_t val);</div>
+<div class="line"><a id="l00577" name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00594" name="l00594"></a><span class="lineno">  594</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00595" name="l00595"></a><span class="lineno">  595</span>    &gt;</div>
+<div class="line"><a id="l00596" name="l00596"></a><span class="lineno">  596</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>        CompletionToken,</div>
+<div class="line"><a id="l00599" name="l00599"></a><span class="lineno">  599</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, <a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a>)</div>
+<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span>    )</div>
+<div class="line"><a id="l00601" name="l00601"></a><span class="lineno">  601</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ae866b887888316e02f14487ec2892a23">  602</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#ae866b887888316e02f14487ec2892a23">async_acquire_unique_packet_id</a>(</div>
+<div class="line"><a id="l00603" name="l00603"></a><span class="lineno">  603</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00604" name="l00604"></a><span class="lineno">  604</span>    );</div>
+<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a id="l00622" name="l00622"></a><span class="lineno">  622</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00623" name="l00623"></a><span class="lineno">  623</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00624" name="l00624"></a><span class="lineno">  624</span>    &gt;</div>
+<div class="line"><a id="l00625" name="l00625"></a><span class="lineno">  625</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00626" name="l00626"></a><span class="lineno">  626</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span>        CompletionToken,</div>
+<div class="line"><a id="l00628" name="l00628"></a><span class="lineno">  628</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, <a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a>)</div>
+<div class="line"><a id="l00629" name="l00629"></a><span class="lineno">  629</span>    )</div>
+<div class="line"><a id="l00630" name="l00630"></a><span class="lineno">  630</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a107f857b734a01cfeb6f8fc7894e60f1">  631</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a107f857b734a01cfeb6f8fc7894e60f1">async_acquire_unique_packet_id_wait_until</a>(</div>
+<div class="line"><a id="l00632" name="l00632"></a><span class="lineno">  632</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00633" name="l00633"></a><span class="lineno">  633</span>    );</div>
+<div class="line"><a id="l00634" name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a id="l00652" name="l00652"></a><span class="lineno">  652</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00653" name="l00653"></a><span class="lineno">  653</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00654" name="l00654"></a><span class="lineno">  654</span>    &gt;</div>
+<div class="line"><a id="l00655" name="l00655"></a><span class="lineno">  655</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00656" name="l00656"></a><span class="lineno">  656</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00657" name="l00657"></a><span class="lineno">  657</span>        CompletionToken,</div>
+<div class="line"><a id="l00658" name="l00658"></a><span class="lineno">  658</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>)</div>
+<div class="line"><a id="l00659" name="l00659"></a><span class="lineno">  659</span>    )</div>
+<div class="line"><a id="l00660" name="l00660"></a><span class="lineno">  660</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#acbe876628df6963609eb6e9aa4a0729e">  661</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#acbe876628df6963609eb6e9aa4a0729e">async_register_packet_id</a>(</div>
+<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span>        <a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id,</div>
+<div class="line"><a id="l00663" name="l00663"></a><span class="lineno">  663</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00664" name="l00664"></a><span class="lineno">  664</span>    );</div>
+<div class="line"><a id="l00665" name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a id="l00682" name="l00682"></a><span class="lineno">  682</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00683" name="l00683"></a><span class="lineno">  683</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00684" name="l00684"></a><span class="lineno">  684</span>    &gt;</div>
+<div class="line"><a id="l00685" name="l00685"></a><span class="lineno">  685</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00686" name="l00686"></a><span class="lineno">  686</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00687" name="l00687"></a><span class="lineno">  687</span>        CompletionToken,</div>
+<div class="line"><a id="l00688" name="l00688"></a><span class="lineno">  688</span>        <span class="keywordtype">void</span>()</div>
+<div class="line"><a id="l00689" name="l00689"></a><span class="lineno">  689</span>    )</div>
+<div class="line"><a id="l00690" name="l00690"></a><span class="lineno">  690</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a2574049a028672d01dcb4a49d80dec27">  691</a></span>    <a class="code hl_function" href="classasync__mqtt_1_1client.html#a2574049a028672d01dcb4a49d80dec27">async_release_packet_id</a>(</div>
+<div class="line"><a id="l00692" name="l00692"></a><span class="lineno">  692</span>        <a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id,</div>
+<div class="line"><a id="l00693" name="l00693"></a><span class="lineno">  693</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00694" name="l00694"></a><span class="lineno">  694</span>    );</div>
+<div class="line"><a id="l00695" name="l00695"></a><span class="lineno">  695</span> </div>
+<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#ab160ebb19bd7e51f8460e59a88deff86">  700</a></span>    std::optional&lt;packet_id_type&gt; <a class="code hl_function" href="classasync__mqtt_1_1client.html#ab160ebb19bd7e51f8460e59a88deff86">acquire_unique_packet_id</a>();</div>
+<div class="line"><a id="l00701" name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc">  707</a></span>    <span class="keywordtype">bool</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc">register_packet_id</a>(<a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id);</div>
+<div class="line"><a id="l00708" name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"><a class="line" href="classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2">  713</a></span>    <span class="keywordtype">void</span> <a class="code hl_function" href="classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2">release_packet_id</a>(<a class="code hl_typedef" href="group__packet.html#gac92751864e0dd29699b7844345ac7162">packet_id_type</a> packet_id);</div>
+<div class="line"><a id="l00714" name="l00714"></a><span class="lineno">  714</span> </div>
+<div class="line"><a id="l00718" name="l00718"></a><span class="lineno">  718</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Executor1&gt;</div>
+<div class="foldopen" id="foldopen00719" data-start="{" data-end="};">
+<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"><a class="line" href="structasync__mqtt_1_1client_1_1rebind__executor.html">  719</a></span>    <span class="keyword">struct </span><a class="code hl_struct" href="structasync__mqtt_1_1client_1_1rebind__executor.html">rebind_executor</a> {</div>
+<div class="line"><a id="l00720" name="l00720"></a><span class="lineno">  720</span>        <span class="keyword">using </span><a class="code hl_class" href="classasync__mqtt_1_1client.html">other</a> = <a class="code hl_class" href="classasync__mqtt_1_1client.html">client</a>&lt;</div>
+<div class="line"><a id="l00721" name="l00721"></a><span class="lineno">  721</span>            Version,</div>
+<div class="line"><a id="l00722" name="l00722"></a><span class="lineno">  722</span>            <span class="keyword">typename</span> NextLayer::template <a class="code hl_class" href="classasync__mqtt_1_1client.html">rebind_executor&lt;Executor1&gt;::other</a></div>
+<div class="line"><a id="l00723" name="l00723"></a><span class="lineno">  723</span>        &gt;;</div>
+<div class="line"><a id="l00724" name="l00724"></a><span class="lineno">  724</span>    };</div>
 </div>
-<div class="line"><a id="l00845" name="l00845"></a><span class="lineno">  845</span> </div>
-<div class="line"><a id="l00846" name="l00846"></a><span class="lineno">  846</span>} <span class="comment">// namespace async_mqtt</span></div>
-<div class="line"><a id="l00847" name="l00847"></a><span class="lineno">  847</span> </div>
-<div class="line"><a id="l00848" name="l00848"></a><span class="lineno">  848</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_impl.hpp&gt;</span></div>
-<div class="line"><a id="l00849" name="l00849"></a><span class="lineno">  849</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_start.hpp&gt;</span></div>
-<div class="line"><a id="l00850" name="l00850"></a><span class="lineno">  850</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_subscribe.hpp&gt;</span></div>
-<div class="line"><a id="l00851" name="l00851"></a><span class="lineno">  851</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_unsubscribe.hpp&gt;</span></div>
-<div class="line"><a id="l00852" name="l00852"></a><span class="lineno">  852</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_publish.hpp&gt;</span></div>
-<div class="line"><a id="l00853" name="l00853"></a><span class="lineno">  853</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_disconnect.hpp&gt;</span></div>
-<div class="line"><a id="l00854" name="l00854"></a><span class="lineno">  854</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_auth.hpp&gt;</span></div>
-<div class="line"><a id="l00855" name="l00855"></a><span class="lineno">  855</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_close.hpp&gt;</span></div>
-<div class="line"><a id="l00856" name="l00856"></a><span class="lineno">  856</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_recv.hpp&gt;</span></div>
-<div class="line"><a id="l00857" name="l00857"></a><span class="lineno">  857</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_acquire_unique_packet_id.hpp&gt;</span></div>
-<div class="line"><a id="l00858" name="l00858"></a><span class="lineno">  858</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_acquire_unique_packet_id_wait_until.hpp&gt;</span></div>
-<div class="line"><a id="l00859" name="l00859"></a><span class="lineno">  859</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_register_packet_id.hpp&gt;</span></div>
-<div class="line"><a id="l00860" name="l00860"></a><span class="lineno">  860</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_release_packet_id.hpp&gt;</span></div>
+<div class="line"><a id="l00725" name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a id="l00726" name="l00726"></a><span class="lineno">  726</span><span class="keyword">private</span>:</div>
+<div class="line"><a id="l00727" name="l00727"></a><span class="lineno">  727</span> </div>
+<div class="line"><a id="l00738" name="l00738"></a><span class="lineno">  738</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="line"><a id="l00739" name="l00739"></a><span class="lineno">  739</span>    <span class="keyword">explicit</span></div>
+<div class="line"><a id="l00740" name="l00740"></a><span class="lineno">  740</span>    <a class="code hl_enumvalue" href="group__role.html#gga83492944f4f6b69eb11ce917d1f27c4aa62608e08adc29a8d6dbc9754e659f125">client</a>(</div>
+<div class="line"><a id="l00741" name="l00741"></a><span class="lineno">  741</span>        Args&amp;&amp;... args</div>
+<div class="line"><a id="l00742" name="l00742"></a><span class="lineno">  742</span>    );</div>
+<div class="line"><a id="l00743" name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a id="l00749" name="l00749"></a><span class="lineno">  749</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Other&gt;</div>
+<div class="line"><a id="l00750" name="l00750"></a><span class="lineno">  750</span>    <span class="keyword">explicit</span></div>
+<div class="line"><a id="l00751" name="l00751"></a><span class="lineno">  751</span>    <a class="code hl_enumvalue" href="group__role.html#gga83492944f4f6b69eb11ce917d1f27c4aa62608e08adc29a8d6dbc9754e659f125">client</a>(</div>
+<div class="line"><a id="l00752" name="l00752"></a><span class="lineno">  752</span>        <a class="code hl_class" href="classasync__mqtt_1_1client.html">client&lt;Version, Other&gt;</a>&amp;&amp; other</div>
+<div class="line"><a id="l00753" name="l00753"></a><span class="lineno">  753</span>    );</div>
+<div class="line"><a id="l00754" name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a id="l00755" name="l00755"></a><span class="lineno">  755</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00756" name="l00756"></a><span class="lineno">  756</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00757" name="l00757"></a><span class="lineno">  757</span>    &gt;</div>
+<div class="line"><a id="l00758" name="l00758"></a><span class="lineno">  758</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00759" name="l00759"></a><span class="lineno">  759</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00760" name="l00760"></a><span class="lineno">  760</span>        CompletionToken,</div>
+<div class="line"><a id="l00761" name="l00761"></a><span class="lineno">  761</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, std::optional&lt;connack_packet&gt;)</div>
+<div class="line"><a id="l00762" name="l00762"></a><span class="lineno">  762</span>    )</div>
+<div class="line"><a id="l00763" name="l00763"></a><span class="lineno">  763</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00764" name="l00764"></a><span class="lineno">  764</span>    async_start_impl(</div>
+<div class="line"><a id="l00765" name="l00765"></a><span class="lineno">  765</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
+<div class="line"><a id="l00766" name="l00766"></a><span class="lineno">  766</span>        std::optional&lt;connect_packet&gt; packet,</div>
+<div class="line"><a id="l00767" name="l00767"></a><span class="lineno">  767</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00768" name="l00768"></a><span class="lineno">  768</span>    );</div>
+<div class="line"><a id="l00769" name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a id="l00770" name="l00770"></a><span class="lineno">  770</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00771" name="l00771"></a><span class="lineno">  771</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00772" name="l00772"></a><span class="lineno">  772</span>    &gt;</div>
+<div class="line"><a id="l00773" name="l00773"></a><span class="lineno">  773</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00774" name="l00774"></a><span class="lineno">  774</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00775" name="l00775"></a><span class="lineno">  775</span>        CompletionToken,</div>
+<div class="line"><a id="l00776" name="l00776"></a><span class="lineno">  776</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, std::optional&lt;suback_packet&gt;)</div>
+<div class="line"><a id="l00777" name="l00777"></a><span class="lineno">  777</span>    )</div>
+<div class="line"><a id="l00778" name="l00778"></a><span class="lineno">  778</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00779" name="l00779"></a><span class="lineno">  779</span>    async_subscribe_impl(</div>
+<div class="line"><a id="l00780" name="l00780"></a><span class="lineno">  780</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
+<div class="line"><a id="l00781" name="l00781"></a><span class="lineno">  781</span>        std::optional&lt;subscribe_packet&gt; packet,</div>
+<div class="line"><a id="l00782" name="l00782"></a><span class="lineno">  782</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00783" name="l00783"></a><span class="lineno">  783</span>    );</div>
+<div class="line"><a id="l00784" name="l00784"></a><span class="lineno">  784</span> </div>
+<div class="line"><a id="l00785" name="l00785"></a><span class="lineno">  785</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00786" name="l00786"></a><span class="lineno">  786</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00787" name="l00787"></a><span class="lineno">  787</span>    &gt;</div>
+<div class="line"><a id="l00788" name="l00788"></a><span class="lineno">  788</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00789" name="l00789"></a><span class="lineno">  789</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00790" name="l00790"></a><span class="lineno">  790</span>        CompletionToken,</div>
+<div class="line"><a id="l00791" name="l00791"></a><span class="lineno">  791</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, std::optional&lt;suback_packet&gt;)</div>
+<div class="line"><a id="l00792" name="l00792"></a><span class="lineno">  792</span>    )</div>
+<div class="line"><a id="l00793" name="l00793"></a><span class="lineno">  793</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00794" name="l00794"></a><span class="lineno">  794</span>    async_unsubscribe_impl(</div>
+<div class="line"><a id="l00795" name="l00795"></a><span class="lineno">  795</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
+<div class="line"><a id="l00796" name="l00796"></a><span class="lineno">  796</span>        std::optional&lt;unsubscribe_packet&gt; packet,</div>
+<div class="line"><a id="l00797" name="l00797"></a><span class="lineno">  797</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00798" name="l00798"></a><span class="lineno">  798</span>    );</div>
+<div class="line"><a id="l00799" name="l00799"></a><span class="lineno">  799</span> </div>
+<div class="line"><a id="l00800" name="l00800"></a><span class="lineno">  800</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00801" name="l00801"></a><span class="lineno">  801</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00802" name="l00802"></a><span class="lineno">  802</span>    &gt;</div>
+<div class="line"><a id="l00803" name="l00803"></a><span class="lineno">  803</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00804" name="l00804"></a><span class="lineno">  804</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00805" name="l00805"></a><span class="lineno">  805</span>        CompletionToken,</div>
+<div class="line"><a id="l00806" name="l00806"></a><span class="lineno">  806</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>, pubres_type)</div>
+<div class="line"><a id="l00807" name="l00807"></a><span class="lineno">  807</span>    )</div>
+<div class="line"><a id="l00808" name="l00808"></a><span class="lineno">  808</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00809" name="l00809"></a><span class="lineno">  809</span>    async_publish_impl(</div>
+<div class="line"><a id="l00810" name="l00810"></a><span class="lineno">  810</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
+<div class="line"><a id="l00811" name="l00811"></a><span class="lineno">  811</span>        std::optional&lt;publish_packet&gt; packet,</div>
+<div class="line"><a id="l00812" name="l00812"></a><span class="lineno">  812</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00813" name="l00813"></a><span class="lineno">  813</span>    );</div>
+<div class="line"><a id="l00814" name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a id="l00815" name="l00815"></a><span class="lineno">  815</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00816" name="l00816"></a><span class="lineno">  816</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00817" name="l00817"></a><span class="lineno">  817</span>    &gt;</div>
+<div class="line"><a id="l00818" name="l00818"></a><span class="lineno">  818</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00819" name="l00819"></a><span class="lineno">  819</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00820" name="l00820"></a><span class="lineno">  820</span>        CompletionToken,</div>
+<div class="line"><a id="l00821" name="l00821"></a><span class="lineno">  821</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>)</div>
+<div class="line"><a id="l00822" name="l00822"></a><span class="lineno">  822</span>    )</div>
+<div class="line"><a id="l00823" name="l00823"></a><span class="lineno">  823</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00824" name="l00824"></a><span class="lineno">  824</span>    async_disconnect_impl(</div>
+<div class="line"><a id="l00825" name="l00825"></a><span class="lineno">  825</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
+<div class="line"><a id="l00826" name="l00826"></a><span class="lineno">  826</span>        std::optional&lt;disconnect_packet&gt; packet,</div>
+<div class="line"><a id="l00827" name="l00827"></a><span class="lineno">  827</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00828" name="l00828"></a><span class="lineno">  828</span>    );</div>
+<div class="line"><a id="l00829" name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a id="l00830" name="l00830"></a><span class="lineno">  830</span>    <span class="keyword">template</span> &lt;</div>
+<div class="line"><a id="l00831" name="l00831"></a><span class="lineno">  831</span>        <span class="keyword">typename</span> CompletionToken = as::default_completion_token_t&lt;executor_type&gt;</div>
+<div class="line"><a id="l00832" name="l00832"></a><span class="lineno">  832</span>    &gt;</div>
+<div class="line"><a id="l00833" name="l00833"></a><span class="lineno">  833</span><span class="preprocessor">#if !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00834" name="l00834"></a><span class="lineno">  834</span>    BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(</div>
+<div class="line"><a id="l00835" name="l00835"></a><span class="lineno">  835</span>        CompletionToken,</div>
+<div class="line"><a id="l00836" name="l00836"></a><span class="lineno">  836</span>        <span class="keywordtype">void</span>(<a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a>)</div>
+<div class="line"><a id="l00837" name="l00837"></a><span class="lineno">  837</span>    )</div>
+<div class="line"><a id="l00838" name="l00838"></a><span class="lineno">  838</span><span class="preprocessor">#endif </span><span class="comment">// !defined(GENERATING_DOCUMENTATION)</span></div>
+<div class="line"><a id="l00839" name="l00839"></a><span class="lineno">  839</span>    async_auth_impl(</div>
+<div class="line"><a id="l00840" name="l00840"></a><span class="lineno">  840</span>        <a class="code hl_typedef" href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">error_code</a> ec,</div>
+<div class="line"><a id="l00841" name="l00841"></a><span class="lineno">  841</span>        std::optional&lt;v5::auth_packet&gt; packet,</div>
+<div class="line"><a id="l00842" name="l00842"></a><span class="lineno">  842</span>        CompletionToken&amp;&amp; token = as::default_completion_token_t&lt;executor_type&gt;{}</div>
+<div class="line"><a id="l00843" name="l00843"></a><span class="lineno">  843</span>    );</div>
+<div class="line"><a id="l00844" name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a id="l00845" name="l00845"></a><span class="lineno">  845</span>    <span class="keywordtype">void</span> recv_loop();</div>
+<div class="line"><a id="l00846" name="l00846"></a><span class="lineno">  846</span> </div>
+<div class="line"><a id="l00847" name="l00847"></a><span class="lineno">  847</span>    <span class="comment">// async operations</span></div>
+<div class="line"><a id="l00848" name="l00848"></a><span class="lineno">  848</span>    <span class="keyword">struct </span>start_op;</div>
+<div class="line"><a id="l00849" name="l00849"></a><span class="lineno">  849</span>    <span class="keyword">struct </span>subscribe_op;</div>
+<div class="line"><a id="l00850" name="l00850"></a><span class="lineno">  850</span>    <span class="keyword">struct </span>unsubscribe_op;</div>
+<div class="line"><a id="l00851" name="l00851"></a><span class="lineno">  851</span>    <span class="keyword">struct </span>publish_op;</div>
+<div class="line"><a id="l00852" name="l00852"></a><span class="lineno">  852</span>    <span class="keyword">struct </span>disconnect_op;</div>
+<div class="line"><a id="l00853" name="l00853"></a><span class="lineno">  853</span>    <span class="keyword">struct </span>auth_op;</div>
+<div class="line"><a id="l00854" name="l00854"></a><span class="lineno">  854</span>    <span class="keyword">struct </span>recv_op;</div>
+<div class="line"><a id="l00855" name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a id="l00856" name="l00856"></a><span class="lineno">  856</span>    <span class="comment">// internal types</span></div>
+<div class="line"><a id="l00857" name="l00857"></a><span class="lineno">  857</span>    <span class="keyword">struct </span>pid_tim_pv_res_col;</div>
+<div class="line"><a id="l00858" name="l00858"></a><span class="lineno">  858</span>    <span class="keyword">struct </span>recv_type;</div>
+<div class="line"><a id="l00859" name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a id="l00860" name="l00860"></a><span class="lineno">  860</span>    <span class="keyword">using </span>endpoint_type_sp = std::shared_ptr&lt;endpoint_type&gt;;</div>
 <div class="line"><a id="l00861" name="l00861"></a><span class="lineno">  861</span> </div>
-<div class="line"><a id="l00862" name="l00862"></a><span class="lineno">  862</span><span class="preprocessor">#endif </span><span class="comment">// ASYNC_MQTT_CLIENT_HPP</span></div>
+<div class="line"><a id="l00862" name="l00862"></a><span class="lineno">  862</span>    endpoint_type_sp ep_;</div>
+<div class="line"><a id="l00863" name="l00863"></a><span class="lineno">  863</span>    pid_tim_pv_res_col pid_tim_pv_res_col_;</div>
+<div class="line"><a id="l00864" name="l00864"></a><span class="lineno">  864</span>    std::deque&lt;recv_type&gt; recv_queue_;</div>
+<div class="line"><a id="l00865" name="l00865"></a><span class="lineno">  865</span>    <span class="keywordtype">bool</span> recv_queue_inserted_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00866" name="l00866"></a><span class="lineno">  866</span>    as::steady_timer tim_notify_publish_recv_;</div>
+<div class="line"><a id="l00867" name="l00867"></a><span class="lineno">  867</span>};</div>
+</div>
+<div class="line"><a id="l00868" name="l00868"></a><span class="lineno">  868</span> </div>
+<div class="line"><a id="l00869" name="l00869"></a><span class="lineno">  869</span>} <span class="comment">// namespace async_mqtt</span></div>
+<div class="line"><a id="l00870" name="l00870"></a><span class="lineno">  870</span> </div>
+<div class="line"><a id="l00871" name="l00871"></a><span class="lineno">  871</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_impl.hpp&gt;</span></div>
+<div class="line"><a id="l00872" name="l00872"></a><span class="lineno">  872</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_start.hpp&gt;</span></div>
+<div class="line"><a id="l00873" name="l00873"></a><span class="lineno">  873</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_subscribe.hpp&gt;</span></div>
+<div class="line"><a id="l00874" name="l00874"></a><span class="lineno">  874</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_unsubscribe.hpp&gt;</span></div>
+<div class="line"><a id="l00875" name="l00875"></a><span class="lineno">  875</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_publish.hpp&gt;</span></div>
+<div class="line"><a id="l00876" name="l00876"></a><span class="lineno">  876</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_disconnect.hpp&gt;</span></div>
+<div class="line"><a id="l00877" name="l00877"></a><span class="lineno">  877</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_auth.hpp&gt;</span></div>
+<div class="line"><a id="l00878" name="l00878"></a><span class="lineno">  878</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_close.hpp&gt;</span></div>
+<div class="line"><a id="l00879" name="l00879"></a><span class="lineno">  879</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_recv.hpp&gt;</span></div>
+<div class="line"><a id="l00880" name="l00880"></a><span class="lineno">  880</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_acquire_unique_packet_id.hpp&gt;</span></div>
+<div class="line"><a id="l00881" name="l00881"></a><span class="lineno">  881</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_acquire_unique_packet_id_wait_until.hpp&gt;</span></div>
+<div class="line"><a id="l00882" name="l00882"></a><span class="lineno">  882</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_register_packet_id.hpp&gt;</span></div>
+<div class="line"><a id="l00883" name="l00883"></a><span class="lineno">  883</span><span class="preprocessor">#include &lt;async_mqtt/impl/client_release_packet_id.hpp&gt;</span></div>
+<div class="line"><a id="l00884" name="l00884"></a><span class="lineno">  884</span> </div>
+<div class="line"><a id="l00885" name="l00885"></a><span class="lineno">  885</span><span class="preprocessor">#endif </span><span class="comment">// ASYNC_MQTT_CLIENT_HPP</span></div>
 <div class="ttc" id="aclassasync__mqtt_1_1basic__endpoint_html"><div class="ttname"><a href="classasync__mqtt_1_1basic__endpoint.html">async_mqtt::basic_endpoint</a></div><div class="ttdoc">MQTT endpoint corresponding to the connection.</div><div class="ttdef"><b>Definition</b> endpoint_fwd.hpp:28</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1basic__endpoint_html_a631e1e2d54cfc10767b1d8c29639441d"><div class="ttname"><a href="classasync__mqtt_1_1basic__endpoint.html#a631e1e2d54cfc10767b1d8c29639441d">async_mqtt::basic_endpoint::executor_type</a></div><div class="ttdeci">typename next_layer_type::executor_type executor_type</div><div class="ttdoc">executor_type of the given NextLayer</div><div class="ttdef"><b>Definition</b> endpoint.hpp:77</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1basic__endpoint_html_ac6d52c82d975d51c9f08627abbf8dec7"><div class="ttname"><a href="classasync__mqtt_1_1basic__endpoint.html#ac6d52c82d975d51c9f08627abbf8dec7">async_mqtt::basic_endpoint::lowest_layer_type</a></div><div class="ttdeci">typename stream_type::lowest_layer_type lowest_layer_type</div><div class="ttdoc">lowest_layer_type of the given NextLayer</div><div class="ttdef"><b>Definition</b> endpoint.hpp:74</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1basic__endpoint_html_af485b15270d8b1e12746342d4f79cb15"><div class="ttname"><a href="classasync__mqtt_1_1basic__endpoint.html#af485b15270d8b1e12746342d4f79cb15">async_mqtt::basic_endpoint::next_layer_type</a></div><div class="ttdeci">typename stream_type::next_layer_type next_layer_type</div><div class="ttdoc">type of the given NextLayer</div><div class="ttdef"><b>Definition</b> endpoint.hpp:71</div></div>
-<div class="ttc" id="aclassasync__mqtt_1_1client_html"><div class="ttname"><a href="classasync__mqtt_1_1client.html">async_mqtt::client</a></div><div class="ttdoc">MQTT client for casual usecases.</div><div class="ttdef"><b>Definition</b> client.hpp:81</div></div>
+<div class="ttc" id="aclassasync__mqtt_1_1client_html"><div class="ttname"><a href="classasync__mqtt_1_1client.html">async_mqtt::client</a></div><div class="ttdoc">MQTT client for casual usecases.</div><div class="ttdef"><b>Definition</b> client.hpp:82</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a09c99f0a62f86b9449cbd2407d74be69"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69">async_mqtt::client::client</a></div><div class="ttdeci">client(this_type const &amp;)=delete</div><div class="ttdoc">copy constructor deleted</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a09f09518ac6e775b09519080a96af3a2"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2">async_mqtt::client::set_auto_replace_topic_alias_send</a></div><div class="ttdeci">void set_auto_replace_topic_alias_send(bool val)</div><div class="ttdoc">auto replace topic with corresponding topic alias on send PUBLISH packet. Registering topic alias nee...</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a107f857b734a01cfeb6f8fc7894e60f1"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a107f857b734a01cfeb6f8fc7894e60f1">async_mqtt::client::async_acquire_unique_packet_id_wait_until</a></div><div class="ttdeci">async_acquire_unique_packet_id_wait_until(CompletionToken &amp;&amp;token=as::default_completion_token_t&lt; executor_type &gt;{})</div><div class="ttdoc">acuire unique packet_id. If packet_id is fully acquired, then wait until released.</div></div>
@@ -468,6 +482,7 @@
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a2574049a028672d01dcb4a49d80dec27"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a2574049a028672d01dcb4a49d80dec27">async_mqtt::client::async_release_packet_id</a></div><div class="ttdeci">async_release_packet_id(packet_id_type packet_id, CompletionToken &amp;&amp;token=as::default_completion_token_t&lt; executor_type &gt;{})</div><div class="ttdoc">release packet_id.</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a29e1d876f3ec12c7a8d69c406be15fc7"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7">async_mqtt::client::async_unsubscribe</a></div><div class="ttdeci">auto async_unsubscribe(Args &amp;&amp;... args)</div><div class="ttdoc">send UNSUBSCRIBE packet</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a2a7414f348afda7a9059135338ddaadc"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc">async_mqtt::client::register_packet_id</a></div><div class="ttdeci">bool register_packet_id(packet_id_type packet_id)</div><div class="ttdoc">register packet_id.</div></div>
+<div class="ttc" id="aclassasync__mqtt_1_1client_html_a38459925809f8106efee03ade8e66c41"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41">async_mqtt::client::create</a></div><div class="ttdeci">static std::shared_ptr&lt; this_type &gt; create(Args &amp;&amp;... args)</div><div class="ttdoc">create</div><div class="ttdef"><b>Definition</b> client.hpp:147</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a3f9ba18339a5788f7d4386845eabfbe7"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7">async_mqtt::client::set_pingresp_recv_timeout_ms</a></div><div class="ttdeci">void set_pingresp_recv_timeout_ms(std::size_t ms)</div><div class="ttdoc">Set timeout for receiving PINGRESP packet after PINGREQ packet is sent. If the timer is fired,...</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a408de6451241efe9acb6d8f671228e28"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28">async_mqtt::client::next_layer</a></div><div class="ttdeci">next_layer_type &amp; next_layer()</div><div class="ttdoc">next_layer getter</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a449daed4cb9f6cb3d417a9bdcb6f092d"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d">async_mqtt::client::get_endpoint</a></div><div class="ttdeci">endpoint_type const &amp; get_endpoint() const</div><div class="ttdoc">get endpoint This is for detail operation</div></div>
@@ -476,12 +491,11 @@
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a56ea5843ac36b21e1c5cabd6dec4416f"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f">async_mqtt::client::lowest_layer</a></div><div class="ttdeci">lowest_layer_type &amp; lowest_layer()</div><div class="ttdoc">lowest_layer getter</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a5e091785f9ed21afc1aeaf9a09ccebb2"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2">async_mqtt::client::release_packet_id</a></div><div class="ttdeci">void release_packet_id(packet_id_type packet_id)</div><div class="ttdoc">release packet_id.</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a6808a6f7f9535ec152dcc9ee430caf92"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a6808a6f7f9535ec152dcc9ee430caf92">async_mqtt::client::async_start</a></div><div class="ttdeci">auto async_start(Args &amp;&amp;... args)</div><div class="ttdoc">send CONNECT packet and start packet receive loop</div></div>
-<div class="ttc" id="aclassasync__mqtt_1_1client_html_a69c86bce11c102ac589f446bff5aaff7"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">async_mqtt::client::next_layer_type</a></div><div class="ttdeci">typename endpoint_type::next_layer_type next_layer_type</div><div class="ttdoc">type of the given NextLayer</div><div class="ttdef"><b>Definition</b> client.hpp:89</div></div>
+<div class="ttc" id="aclassasync__mqtt_1_1client_html_a69c86bce11c102ac589f446bff5aaff7"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7">async_mqtt::client::next_layer_type</a></div><div class="ttdeci">typename endpoint_type::next_layer_type next_layer_type</div><div class="ttdoc">type of the given NextLayer</div><div class="ttdef"><b>Definition</b> client.hpp:94</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a825c14790ca009436f20c1b2c7952204"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a825c14790ca009436f20c1b2c7952204">async_mqtt::client::async_recv</a></div><div class="ttdeci">async_recv(CompletionToken &amp;&amp;token=as::default_completion_token_t&lt; executor_type &gt;{})</div><div class="ttdoc">receive PUBLISH or DISCONNECT packet users CANNOT call recv() before the previous recv()'s Completion...</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a84882203ef55d144ed04d71d25d5a158"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158">async_mqtt::client::lowest_layer</a></div><div class="ttdeci">lowest_layer_type const &amp; lowest_layer() const</div><div class="ttdoc">lowest_layer getter</div></div>
-<div class="ttc" id="aclassasync__mqtt_1_1client_html_a93814f9dcc11fb4295897ac5317c276d"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d">async_mqtt::client::executor_type</a></div><div class="ttdeci">typename endpoint_type::executor_type executor_type</div><div class="ttdoc">executor_type of the given NextLayer</div><div class="ttdef"><b>Definition</b> client.hpp:95</div></div>
+<div class="ttc" id="aclassasync__mqtt_1_1client_html_a93814f9dcc11fb4295897ac5317c276d"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d">async_mqtt::client::executor_type</a></div><div class="ttdeci">typename endpoint_type::executor_type executor_type</div><div class="ttdoc">executor_type of the given NextLayer</div><div class="ttdef"><b>Definition</b> client.hpp:100</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a9920aeeb283f6ff9a9eb164a52f1eb5c"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a9920aeeb283f6ff9a9eb164a52f1eb5c">async_mqtt::client::async_auth</a></div><div class="ttdeci">auto async_auth(Args &amp;&amp;... args)</div><div class="ttdoc">send AUTH packet</div></div>
-<div class="ttc" id="aclassasync__mqtt_1_1client_html_a9b17702ad539982547fa5dc3de34f8df"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df">async_mqtt::client::client</a></div><div class="ttdeci">client(Args &amp;&amp;... args)</div><div class="ttdoc">constructor</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_a9dda4bdcebd220beb5392adb5da86110"><div class="ttname"><a href="classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110">async_mqtt::client::async_close</a></div><div class="ttdeci">async_close(CompletionToken &amp;&amp;token=as::default_completion_token_t&lt; executor_type &gt;{})</div><div class="ttdoc">close the underlying connection</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_aa56df38927dcfa249981a336cd14c649"><div class="ttname"><a href="classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649">async_mqtt::client::set_bulk_write</a></div><div class="ttdeci">void set_bulk_write(bool val)</div><div class="ttdoc">Set bulk write mode. If true, then concatenate multiple packets' const buffer sequence when send() is...</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_aad4b874d0e7adedc8f8714f2acc2b98d"><div class="ttname"><a href="classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d">async_mqtt::client::operator=</a></div><div class="ttdeci">this_type &amp; operator=(this_type &amp;&amp;)=default</div><div class="ttdoc">move assign operator</div></div>
@@ -490,10 +504,9 @@
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_ac717d23602387557b4652841050f2825"><div class="ttname"><a href="classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825">async_mqtt::client::get_executor</a></div><div class="ttdeci">as::any_io_executor get_executor() const</div><div class="ttdoc">executor getter</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_acbe876628df6963609eb6e9aa4a0729e"><div class="ttname"><a href="classasync__mqtt_1_1client.html#acbe876628df6963609eb6e9aa4a0729e">async_mqtt::client::async_register_packet_id</a></div><div class="ttdeci">async_register_packet_id(packet_id_type packet_id, CompletionToken &amp;&amp;token=as::default_completion_token_t&lt; executor_type &gt;{})</div><div class="ttdoc">register packet_id.</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_acd225df7e04770be801742bbbb437d9e"><div class="ttname"><a href="classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e">async_mqtt::client::async_disconnect</a></div><div class="ttdeci">auto async_disconnect(Args &amp;&amp;... args)</div><div class="ttdoc">send DISCONNECT packet</div></div>
-<div class="ttc" id="aclassasync__mqtt_1_1client_html_ae422a3de6052d79df44db7f73994c54f"><div class="ttname"><a href="classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f">async_mqtt::client::client</a></div><div class="ttdeci">client(client&lt; Version, Other &gt; &amp;&amp;other)</div><div class="ttdoc">Rebinding constructor This constructor creates a client from the client with a different executor.</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_ae866b887888316e02f14487ec2892a23"><div class="ttname"><a href="classasync__mqtt_1_1client.html#ae866b887888316e02f14487ec2892a23">async_mqtt::client::async_acquire_unique_packet_id</a></div><div class="ttdeci">async_acquire_unique_packet_id(CompletionToken &amp;&amp;token=as::default_completion_token_t&lt; executor_type &gt;{})</div><div class="ttdoc">acuire unique packet_id.</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_aea02e31d5f8e45f5eb7eb886f7a5068a"><div class="ttname"><a href="classasync__mqtt_1_1client.html#aea02e31d5f8e45f5eb7eb886f7a5068a">async_mqtt::client::async_publish</a></div><div class="ttdeci">auto async_publish(Args &amp;&amp;... args)</div><div class="ttdoc">send PUBLISH packet</div></div>
-<div class="ttc" id="aclassasync__mqtt_1_1client_html_aeb5e89195f6b3080b218c321d4b6d7ef"><div class="ttname"><a href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">async_mqtt::client::lowest_layer_type</a></div><div class="ttdeci">typename endpoint_type::lowest_layer_type lowest_layer_type</div><div class="ttdoc">lowest_layer_type of the given NextLayer</div><div class="ttdef"><b>Definition</b> client.hpp:92</div></div>
+<div class="ttc" id="aclassasync__mqtt_1_1client_html_aeb5e89195f6b3080b218c321d4b6d7ef"><div class="ttname"><a href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef">async_mqtt::client::lowest_layer_type</a></div><div class="ttdeci">typename endpoint_type::lowest_layer_type lowest_layer_type</div><div class="ttdoc">lowest_layer_type of the given NextLayer</div><div class="ttdef"><b>Definition</b> client.hpp:97</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_aece04b491b26e3484ce5125748b86adf"><div class="ttname"><a href="classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf">async_mqtt::client::set_bulk_read_buffer_size</a></div><div class="ttdeci">void set_bulk_read_buffer_size(std::size_t val)</div><div class="ttdoc">Set the bulk read buffer size. If bulk read is enabled, the val parameter specifies the size of the i...</div></div>
 <div class="ttc" id="aclassasync__mqtt_1_1client_html_af70a56e528cc0a32b2d5dbc5a43bc806"><div class="ttname"><a href="classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806">async_mqtt::client::operator=</a></div><div class="ttdeci">this_type &amp; operator=(this_type const &amp;)=delete</div><div class="ttdoc">copy assign operator deleted</div></div>
 <div class="ttc" id="agroup__error_html_gaa100a3fca173f12e33f3b5711710033d"><div class="ttname"><a href="group__error.html#gaa100a3fca173f12e33f3b5711710033d">async_mqtt::error_code</a></div><div class="ttdeci">sys::error_code error_code</div><div class="ttdoc">sys is a namespace alias of boost::sytem.</div><div class="ttdef"><b>Definition</b> error.hpp:41</div></div>
@@ -512,11 +525,12 @@
 <div class="ttc" id="agroup__packet_html_ggad751afab4b1771811a82fcc3f34938b4ad489cb9c3245a5fa1b6e93310da6dd77"><div class="ttname"><a href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4ad489cb9c3245a5fa1b6e93310da6dd77">async_mqtt::control_packet_type::suback</a></div><div class="ttdeci">@ suback</div><div class="ttdoc">SUBACK(9)</div></div>
 <div class="ttc" id="agroup__packet_html_ggad751afab4b1771811a82fcc3f34938b4ade8de1ea16b86f9f4452bc58259014e8"><div class="ttname"><a href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4ade8de1ea16b86f9f4452bc58259014e8">async_mqtt::control_packet_type::pingreq</a></div><div class="ttdeci">@ pingreq</div><div class="ttdoc">PINGREQ(12)</div></div>
 <div class="ttc" id="agroup__packet_html_ggad751afab4b1771811a82fcc3f34938b4afae41652874a4576f7aa845273c2df77"><div class="ttname"><a href="group__packet.html#ggad751afab4b1771811a82fcc3f34938b4afae41652874a4576f7aa845273c2df77">async_mqtt::control_packet_type::connack</a></div><div class="ttdeci">@ connack</div><div class="ttdoc">CONNACK(2)</div></div>
-<div class="ttc" id="astructasync__mqtt_1_1client_1_1pubres__type_html"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1pubres__type.html">async_mqtt::client::pubres_type</a></div><div class="ttdoc">publish completion handler parameter class</div><div class="ttdef"><b>Definition</b> client.hpp:115</div></div>
-<div class="ttc" id="astructasync__mqtt_1_1client_1_1pubres__type_html_a2236be9c48a3a879ceb1fc3b36e14ffc"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1pubres__type.html#a2236be9c48a3a879ceb1fc3b36e14ffc">async_mqtt::client::pubres_type::pubrec_opt</a></div><div class="ttdeci">std::optional&lt; pubrec_packet &gt; pubrec_opt</div><div class="ttdef"><b>Definition</b> client.hpp:123</div></div>
-<div class="ttc" id="astructasync__mqtt_1_1client_1_1pubres__type_html_ac421d7d122a64ae87537f85dc9faaf15"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1pubres__type.html#ac421d7d122a64ae87537f85dc9faaf15">async_mqtt::client::pubres_type::pubcomp_opt</a></div><div class="ttdeci">std::optional&lt; pubcomp_packet &gt; pubcomp_opt</div><div class="ttdef"><b>Definition</b> client.hpp:127</div></div>
-<div class="ttc" id="astructasync__mqtt_1_1client_1_1pubres__type_html_adbf276995037034b6a8ea247bd35b53a"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1pubres__type.html#adbf276995037034b6a8ea247bd35b53a">async_mqtt::client::pubres_type::puback_opt</a></div><div class="ttdeci">std::optional&lt; puback_packet &gt; puback_opt</div><div class="ttdef"><b>Definition</b> client.hpp:119</div></div>
-<div class="ttc" id="astructasync__mqtt_1_1client_1_1rebind__executor_html"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1rebind__executor.html">async_mqtt::client::rebind_executor</a></div><div class="ttdoc">rebinds the client type to another executor</div><div class="ttdef"><b>Definition</b> client.hpp:723</div></div>
+<div class="ttc" id="agroup__role_html_gga83492944f4f6b69eb11ce917d1f27c4aa62608e08adc29a8d6dbc9754e659f125"><div class="ttname"><a href="group__role.html#gga83492944f4f6b69eb11ce917d1f27c4aa62608e08adc29a8d6dbc9754e659f125">async_mqtt::role::client</a></div><div class="ttdeci">@ client</div><div class="ttdoc">as client. Can't send CONNACK, SUBACK, UNSUBACK, PINGRESP. Can send Other packets.</div></div>
+<div class="ttc" id="astructasync__mqtt_1_1client_1_1pubres__type_html"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1pubres__type.html">async_mqtt::client::pubres_type</a></div><div class="ttdoc">publish completion handler parameter class</div><div class="ttdef"><b>Definition</b> client.hpp:120</div></div>
+<div class="ttc" id="astructasync__mqtt_1_1client_1_1pubres__type_html_a2236be9c48a3a879ceb1fc3b36e14ffc"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1pubres__type.html#a2236be9c48a3a879ceb1fc3b36e14ffc">async_mqtt::client::pubres_type::pubrec_opt</a></div><div class="ttdeci">std::optional&lt; pubrec_packet &gt; pubrec_opt</div><div class="ttdef"><b>Definition</b> client.hpp:128</div></div>
+<div class="ttc" id="astructasync__mqtt_1_1client_1_1pubres__type_html_ac421d7d122a64ae87537f85dc9faaf15"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1pubres__type.html#ac421d7d122a64ae87537f85dc9faaf15">async_mqtt::client::pubres_type::pubcomp_opt</a></div><div class="ttdeci">std::optional&lt; pubcomp_packet &gt; pubcomp_opt</div><div class="ttdef"><b>Definition</b> client.hpp:132</div></div>
+<div class="ttc" id="astructasync__mqtt_1_1client_1_1pubres__type_html_adbf276995037034b6a8ea247bd35b53a"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1pubres__type.html#adbf276995037034b6a8ea247bd35b53a">async_mqtt::client::pubres_type::puback_opt</a></div><div class="ttdeci">std::optional&lt; puback_packet &gt; puback_opt</div><div class="ttdef"><b>Definition</b> client.hpp:124</div></div>
+<div class="ttc" id="astructasync__mqtt_1_1client_1_1rebind__executor_html"><div class="ttname"><a href="structasync__mqtt_1_1client_1_1rebind__executor.html">async_mqtt::client::rebind_executor</a></div><div class="ttdoc">rebinds the client type to another executor</div><div class="ttdef"><b>Definition</b> client.hpp:719</div></div>
 </div><!-- fragment --></div><!-- contents -->
 </div><!-- doc-content -->
 <!-- start footer part -->
diff --git a/doc/api/control__packet__type_8hpp_source.html b/doc/api/control__packet__type_8hpp_source.html
index d2bd58ba2..01f845b4c 100644
--- a/doc/api/control__packet__type_8hpp_source.html
+++ b/doc/api/control__packet__type_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/customized__basic__stream_8hpp_source.html b/doc/api/customized__basic__stream_8hpp_source.html
index ca0ca6e8b..4f0669fe2 100644
--- a/doc/api/customized__basic__stream_8hpp_source.html
+++ b/doc/api/customized__basic__stream_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/customized__ssl__stream_8hpp.html b/doc/api/customized__ssl__stream_8hpp.html
index aec3a1029..ec42592c2 100644
--- a/doc/api/customized__ssl__stream_8hpp.html
+++ b/doc/api/customized__ssl__stream_8hpp.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/customized__ssl__stream_8hpp_source.html b/doc/api/customized__ssl__stream_8hpp_source.html
index 57f53a46f..1234f9408 100644
--- a/doc/api/customized__ssl__stream_8hpp_source.html
+++ b/doc/api/customized__ssl__stream_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/customized__websocket__stream_8hpp.html b/doc/api/customized__websocket__stream_8hpp.html
index 24f125b77..01ab657e0 100644
--- a/doc/api/customized__websocket__stream_8hpp.html
+++ b/doc/api/customized__websocket__stream_8hpp.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/customized__websocket__stream_8hpp_source.html b/doc/api/customized__websocket__stream_8hpp_source.html
index 9d04f469d..eb0c3cff9 100644
--- a/doc/api/customized__websocket__stream_8hpp_source.html
+++ b/doc/api/customized__websocket__stream_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/dir_cce41e6148f04805f4e76e6a36ba88d6.html b/doc/api/dir_cce41e6148f04805f4e76e6a36ba88d6.html
index f006ae775..d680eb137 100644
--- a/doc/api/dir_cce41e6148f04805f4e76e6a36ba88d6.html
+++ b/doc/api/dir_cce41e6148f04805f4e76e6a36ba88d6.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/dir_ce1a31e6a52137e313c4ed05ef460346.html b/doc/api/dir_ce1a31e6a52137e313c4ed05ef460346.html
index c894bc317..8ce599996 100644
--- a/doc/api/dir_ce1a31e6a52137e313c4ed05ef460346.html
+++ b/doc/api/dir_ce1a31e6a52137e313c4ed05ef460346.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/api/dir_d44c64559bbebec7f509842c48db8b23.html
index a5efab5e2..767dae528 100644
--- a/doc/api/dir_d44c64559bbebec7f509842c48db8b23.html
+++ b/doc/api/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/dir_df0bffcb61356486763cc61cf65485e2.html b/doc/api/dir_df0bffcb61356486763cc61cf65485e2.html
index 611a2129e..e20a65f91 100644
--- a/doc/api/dir_df0bffcb61356486763cc61cf65485e2.html
+++ b/doc/api/dir_df0bffcb61356486763cc61cf65485e2.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/dir_f8efeb8e1feb6bbd3b8b0bf040091d61.html b/doc/api/dir_f8efeb8e1feb6bbd3b8b0bf040091d61.html
index c7ed8daa2..f7c2931a7 100644
--- a/doc/api/dir_f8efeb8e1feb6bbd3b8b0bf040091d61.html
+++ b/doc/api/dir_f8efeb8e1feb6bbd3b8b0bf040091d61.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/doxygen_crawl.html b/doc/api/doxygen_crawl.html
index caf40367d..552684a74 100644
--- a/doc/api/doxygen_crawl.html
+++ b/doc/api/doxygen_crawl.html
@@ -577,6 +577,7 @@
 <a href="classasync__mqtt_1_1client.html#a2574049a028672d01dcb4a49d80dec27"/>
 <a href="classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7"/>
 <a href="classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc"/>
+<a href="classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41"/>
 <a href="classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7"/>
 <a href="classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28"/>
 <a href="classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d"/>
@@ -591,7 +592,6 @@
 <a href="classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158"/>
 <a href="classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d"/>
 <a href="classasync__mqtt_1_1client.html#a9920aeeb283f6ff9a9eb164a52f1eb5c"/>
-<a href="classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df"/>
 <a href="classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110"/>
 <a href="classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649"/>
 <a href="classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d"/>
@@ -600,7 +600,6 @@
 <a href="classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825"/>
 <a href="classasync__mqtt_1_1client.html#acbe876628df6963609eb6e9aa4a0729e"/>
 <a href="classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e"/>
-<a href="classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f"/>
 <a href="classasync__mqtt_1_1client.html#ae866b887888316e02f14487ec2892a23"/>
 <a href="classasync__mqtt_1_1client.html#aea02e31d5f8e45f5eb7eb886f7a5068a"/>
 <a href="classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef"/>
diff --git a/doc/api/endian__convert_8hpp_source.html b/doc/api/endian__convert_8hpp_source.html
index 911597029..cd51c7837 100644
--- a/doc/api/endian__convert_8hpp_source.html
+++ b/doc/api/endian__convert_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/endpoint_8hpp_source.html b/doc/api/endpoint_8hpp_source.html
index 7ff308b30..38d16517e 100644
--- a/doc/api/endpoint_8hpp_source.html
+++ b/doc/api/endpoint_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
@@ -137,7 +137,7 @@
 </div>
 <div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span> </div>
 <div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="keyword">template</span> &lt;role Role, std::<span class="keywordtype">size_t</span> PacketIdBytes, <span class="keyword">typename</span> NextLayer&gt;</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="keyword">class </span>basic_endpoint : <span class="keyword">public</span> std::enable_shared_from_this&lt;basic_endpoint&lt;Role, PacketIdBytes, NextLayer&gt;&gt;{</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="keyword">class </span>basic_endpoint : <span class="keyword">public</span> std::enable_shared_from_this&lt;basic_endpoint&lt;Role, PacketIdBytes, NextLayer&gt;&gt; {</div>
 <div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>    <span class="keyword">enum class</span> connection_status {</div>
 <div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>        connecting,</div>
 <div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>        connected,</div>
diff --git a/doc/api/endpoint__fwd_8hpp_source.html b/doc/api/endpoint__fwd_8hpp_source.html
index 829ed036d..ab4851afc 100644
--- a/doc/api/endpoint__fwd_8hpp_source.html
+++ b/doc/api/endpoint__fwd_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/error_8hpp_source.html b/doc/api/error_8hpp_source.html
index f18eaa5c9..03deda3a6 100644
--- a/doc/api/error_8hpp_source.html
+++ b/doc/api/error_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/files.html b/doc/api/files.html
index 7b8e06b36..3ff101015 100644
--- a/doc/api/files.html
+++ b/doc/api/files.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions.html b/doc/api/functions.html
index adecf0908..0a6f85e4c 100644
--- a/doc/api/functions.html
+++ b/doc/api/functions.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_b.html b/doc/api/functions_b.html
index aeaab14e2..17069cf82 100644
--- a/doc/api/functions_b.html
+++ b/doc/api/functions_b.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_c.html b/doc/api/functions_c.html
index ce31a16eb..18f2514a2 100644
--- a/doc/api/functions_c.html
+++ b/doc/api/functions_c.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
@@ -104,7 +104,7 @@ <h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 <li>cend()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#a6c0fddafd68f9a02bf999e13b46dce50">async_mqtt::buffer</a></li>
 <li>clean_session()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1v3__1__1_1_1connect__packet.html#a77c76294b8c6d4b21e3dbfa04a89be83">async_mqtt::v3_1_1::connect_packet</a></li>
 <li>clean_start()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1v5_1_1connect__packet.html#a79b4fda95f1f4c3efa7c36126994b0d8">async_mqtt::v5::connect_packet</a></li>
-<li>client()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df">async_mqtt::client&lt; Version, NextLayer &gt;</a></li>
+<li>client()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69">async_mqtt::client&lt; Version, NextLayer &gt;</a></li>
 <li>client_id()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1v3__1__1_1_1connect__packet.html#a3a494302ed12606ba6e907c8810f0ca6">async_mqtt::v3_1_1::connect_packet</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1connect__packet.html#ad7fa9b1e168d2ad324cdfcf8925628d9">async_mqtt::v5::connect_packet</a></li>
 <li>code()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1v3__1__1_1_1connack__packet.html#ac2739356f6ba7a96a40ce0603d632093">async_mqtt::v3_1_1::connack_packet</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1auth__packet.html#aac22f4d07a286273b3110258a872c0fc">async_mqtt::v5::auth_packet</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1basic__puback__packet.html#a9ff420757a073efa336ef4555cef12cf">async_mqtt::v5::basic_puback_packet&lt; PacketIdBytes &gt;</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1basic__pubcomp__packet.html#a1aae36a6c1d3aa4690001368686da800">async_mqtt::v5::basic_pubcomp_packet&lt; PacketIdBytes &gt;</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1basic__pubrec__packet.html#a18acb9fd8d4404d7ba64f2489630e84c">async_mqtt::v5::basic_pubrec_packet&lt; PacketIdBytes &gt;</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1basic__pubrel__packet.html#a7f928cc17d9608e2930c2ed1b92608e3">async_mqtt::v5::basic_pubrel_packet&lt; PacketIdBytes &gt;</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1connack__packet.html#a7fc18769b638a100d65300ae84022330">async_mqtt::v5::connack_packet</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1disconnect__packet.html#a266b66b6c83ae212720cb9c6d3230273">async_mqtt::v5::disconnect_packet</a></li>
 <li>compare()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#aa7b3127002e0a9f2f0641ecad4daea24">async_mqtt::buffer</a></li>
@@ -115,7 +115,7 @@ <h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 <li>copy()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#a9554ca7b3e648e0d6a07b3a5c37c95a6">async_mqtt::buffer</a></li>
 <li>correlation_data()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1property_1_1correlation__data.html#a3485faa745776197b7c7ec0ba6e3e1e6">async_mqtt::property::correlation_data</a></li>
 <li>crbegin()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#a92ed7db78da4b1cd5f8de8acab7a7bbe">async_mqtt::buffer</a></li>
-<li>create()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1basic__endpoint.html#ae3faa98c0f30e8df05ef02a6a1f4ed85">async_mqtt::basic_endpoint&lt; Role, PacketIdBytes, NextLayer &gt;</a></li>
+<li>create()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1basic__endpoint.html#ae3faa98c0f30e8df05ef02a6a1f4ed85">async_mqtt::basic_endpoint&lt; Role, PacketIdBytes, NextLayer &gt;</a>, <a class="el" href="classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41">async_mqtt::client&lt; Version, NextLayer &gt;</a></li>
 <li>crend()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#affa80c740527fd62f738cc271bc9c702">async_mqtt::buffer</a></li>
 </ul>
 </div><!-- contents -->
diff --git a/doc/api/functions_d.html b/doc/api/functions_d.html
index d33c23141..74f4c4c7f 100644
--- a/doc/api/functions_d.html
+++ b/doc/api/functions_d.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_e.html b/doc/api/functions_e.html
index 62b1a5aea..b9c715eae 100644
--- a/doc/api/functions_e.html
+++ b/doc/api/functions_e.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_f.html b/doc/api/functions_f.html
index 1b7082d19..4cec540c7 100644
--- a/doc/api/functions_f.html
+++ b/doc/api/functions_f.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func.html b/doc/api/functions_func.html
index ff62e3d7f..d1b8a449e 100644
--- a/doc/api/functions_func.html
+++ b/doc/api/functions_func.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_b.html b/doc/api/functions_func_b.html
index 16639d7c9..68920f55f 100644
--- a/doc/api/functions_func_b.html
+++ b/doc/api/functions_func_b.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_c.html b/doc/api/functions_func_c.html
index 1fa0b2a13..cdd73b8ad 100644
--- a/doc/api/functions_func_c.html
+++ b/doc/api/functions_func_c.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
@@ -104,7 +104,7 @@ <h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 <li>cend()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#a6c0fddafd68f9a02bf999e13b46dce50">async_mqtt::buffer</a></li>
 <li>clean_session()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1v3__1__1_1_1connect__packet.html#a77c76294b8c6d4b21e3dbfa04a89be83">async_mqtt::v3_1_1::connect_packet</a></li>
 <li>clean_start()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1v5_1_1connect__packet.html#a79b4fda95f1f4c3efa7c36126994b0d8">async_mqtt::v5::connect_packet</a></li>
-<li>client()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df">async_mqtt::client&lt; Version, NextLayer &gt;</a></li>
+<li>client()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69">async_mqtt::client&lt; Version, NextLayer &gt;</a></li>
 <li>client_id()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1v3__1__1_1_1connect__packet.html#a3a494302ed12606ba6e907c8810f0ca6">async_mqtt::v3_1_1::connect_packet</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1connect__packet.html#ad7fa9b1e168d2ad324cdfcf8925628d9">async_mqtt::v5::connect_packet</a></li>
 <li>code()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1v3__1__1_1_1connack__packet.html#ac2739356f6ba7a96a40ce0603d632093">async_mqtt::v3_1_1::connack_packet</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1auth__packet.html#aac22f4d07a286273b3110258a872c0fc">async_mqtt::v5::auth_packet</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1basic__puback__packet.html#a9ff420757a073efa336ef4555cef12cf">async_mqtt::v5::basic_puback_packet&lt; PacketIdBytes &gt;</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1basic__pubcomp__packet.html#a1aae36a6c1d3aa4690001368686da800">async_mqtt::v5::basic_pubcomp_packet&lt; PacketIdBytes &gt;</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1basic__pubrec__packet.html#a18acb9fd8d4404d7ba64f2489630e84c">async_mqtt::v5::basic_pubrec_packet&lt; PacketIdBytes &gt;</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1basic__pubrel__packet.html#a7f928cc17d9608e2930c2ed1b92608e3">async_mqtt::v5::basic_pubrel_packet&lt; PacketIdBytes &gt;</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1connack__packet.html#a7fc18769b638a100d65300ae84022330">async_mqtt::v5::connack_packet</a>, <a class="el" href="classasync__mqtt_1_1v5_1_1disconnect__packet.html#a266b66b6c83ae212720cb9c6d3230273">async_mqtt::v5::disconnect_packet</a></li>
 <li>compare()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#aa7b3127002e0a9f2f0641ecad4daea24">async_mqtt::buffer</a></li>
@@ -115,7 +115,7 @@ <h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 <li>copy()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#a9554ca7b3e648e0d6a07b3a5c37c95a6">async_mqtt::buffer</a></li>
 <li>correlation_data()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1property_1_1correlation__data.html#a3485faa745776197b7c7ec0ba6e3e1e6">async_mqtt::property::correlation_data</a></li>
 <li>crbegin()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#a92ed7db78da4b1cd5f8de8acab7a7bbe">async_mqtt::buffer</a></li>
-<li>create()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1basic__endpoint.html#ae3faa98c0f30e8df05ef02a6a1f4ed85">async_mqtt::basic_endpoint&lt; Role, PacketIdBytes, NextLayer &gt;</a></li>
+<li>create()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1basic__endpoint.html#ae3faa98c0f30e8df05ef02a6a1f4ed85">async_mqtt::basic_endpoint&lt; Role, PacketIdBytes, NextLayer &gt;</a>, <a class="el" href="classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41">async_mqtt::client&lt; Version, NextLayer &gt;</a></li>
 <li>crend()&#160;:&#160;<a class="el" href="classasync__mqtt_1_1buffer.html#affa80c740527fd62f738cc271bc9c702">async_mqtt::buffer</a></li>
 </ul>
 </div><!-- contents -->
diff --git a/doc/api/functions_func_d.html b/doc/api/functions_func_d.html
index f7ea251ab..0a950c683 100644
--- a/doc/api/functions_func_d.html
+++ b/doc/api/functions_func_d.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_e.html b/doc/api/functions_func_e.html
index 760dccbf0..ab853b679 100644
--- a/doc/api/functions_func_e.html
+++ b/doc/api/functions_func_e.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_f.html b/doc/api/functions_func_f.html
index 8fa3f7e67..707e8b5d3 100644
--- a/doc/api/functions_func_f.html
+++ b/doc/api/functions_func_f.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_g.html b/doc/api/functions_func_g.html
index b9c5bbda0..9accb17b4 100644
--- a/doc/api/functions_func_g.html
+++ b/doc/api/functions_func_g.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_h.html b/doc/api/functions_func_h.html
index ce032d937..e48670df5 100644
--- a/doc/api/functions_func_h.html
+++ b/doc/api/functions_func_h.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_i.html b/doc/api/functions_func_i.html
index 3d16b79fd..5bfeac7e0 100644
--- a/doc/api/functions_func_i.html
+++ b/doc/api/functions_func_i.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_k.html b/doc/api/functions_func_k.html
index 92a6aac2d..57b4c3650 100644
--- a/doc/api/functions_func_k.html
+++ b/doc/api/functions_func_k.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_l.html b/doc/api/functions_func_l.html
index 6fe9ecf1f..d487fc9da 100644
--- a/doc/api/functions_func_l.html
+++ b/doc/api/functions_func_l.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_m.html b/doc/api/functions_func_m.html
index c6c130c05..4a220d7f2 100644
--- a/doc/api/functions_func_m.html
+++ b/doc/api/functions_func_m.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_n.html b/doc/api/functions_func_n.html
index 76c310b88..ffa72e51a 100644
--- a/doc/api/functions_func_n.html
+++ b/doc/api/functions_func_n.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_o.html b/doc/api/functions_func_o.html
index 500d1a247..a4f2ae1a6 100644
--- a/doc/api/functions_func_o.html
+++ b/doc/api/functions_func_o.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_p.html b/doc/api/functions_func_p.html
index c1621e622..d0ece21d2 100644
--- a/doc/api/functions_func_p.html
+++ b/doc/api/functions_func_p.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_r.html b/doc/api/functions_func_r.html
index dad992278..ec2b84f8e 100644
--- a/doc/api/functions_func_r.html
+++ b/doc/api/functions_func_r.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_s.html b/doc/api/functions_func_s.html
index f57abf7fe..5a78f378c 100644
--- a/doc/api/functions_func_s.html
+++ b/doc/api/functions_func_s.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_t.html b/doc/api/functions_func_t.html
index abfb352a2..e6857f298 100644
--- a/doc/api/functions_func_t.html
+++ b/doc/api/functions_func_t.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_u.html b/doc/api/functions_func_u.html
index 9756f47c3..6d0f3ae54 100644
--- a/doc/api/functions_func_u.html
+++ b/doc/api/functions_func_u.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_v.html b/doc/api/functions_func_v.html
index 27c4a806a..5dc73a4d9 100644
--- a/doc/api/functions_func_v.html
+++ b/doc/api/functions_func_v.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_w.html b/doc/api/functions_func_w.html
index c53b6c1a0..61e81aae6 100644
--- a/doc/api/functions_func_w.html
+++ b/doc/api/functions_func_w.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_func_~.html b/doc/api/functions_func_~.html
index 6a988fa77..616b86c51 100644
--- a/doc/api/functions_func_~.html
+++ b/doc/api/functions_func_~.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_g.html b/doc/api/functions_g.html
index b1572fedf..db12b45ce 100644
--- a/doc/api/functions_g.html
+++ b/doc/api/functions_g.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_h.html b/doc/api/functions_h.html
index e43d2ad4a..8e4595fab 100644
--- a/doc/api/functions_h.html
+++ b/doc/api/functions_h.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_i.html b/doc/api/functions_i.html
index 4caee292e..d03ff5a9d 100644
--- a/doc/api/functions_i.html
+++ b/doc/api/functions_i.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_k.html b/doc/api/functions_k.html
index 8297723c0..2c8dcf861 100644
--- a/doc/api/functions_k.html
+++ b/doc/api/functions_k.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_l.html b/doc/api/functions_l.html
index 466e0a718..c0efbc9e8 100644
--- a/doc/api/functions_l.html
+++ b/doc/api/functions_l.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_m.html b/doc/api/functions_m.html
index edca0efc9..e16b99d26 100644
--- a/doc/api/functions_m.html
+++ b/doc/api/functions_m.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_n.html b/doc/api/functions_n.html
index 538b0f525..2882e197c 100644
--- a/doc/api/functions_n.html
+++ b/doc/api/functions_n.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_o.html b/doc/api/functions_o.html
index cecb58ac1..b98534cd5 100644
--- a/doc/api/functions_o.html
+++ b/doc/api/functions_o.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_p.html b/doc/api/functions_p.html
index 8cc1ed8c5..1c3583034 100644
--- a/doc/api/functions_p.html
+++ b/doc/api/functions_p.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_r.html b/doc/api/functions_r.html
index ca948a8cb..9ea015e9d 100644
--- a/doc/api/functions_r.html
+++ b/doc/api/functions_r.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_rela.html b/doc/api/functions_rela.html
index 130121b8e..d2ae75dcd 100644
--- a/doc/api/functions_rela.html
+++ b/doc/api/functions_rela.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_s.html b/doc/api/functions_s.html
index 5ffde4613..19ae08b59 100644
--- a/doc/api/functions_s.html
+++ b/doc/api/functions_s.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_t.html b/doc/api/functions_t.html
index 22b47213f..973e0fd37 100644
--- a/doc/api/functions_t.html
+++ b/doc/api/functions_t.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_type.html b/doc/api/functions_type.html
index a2ceb030a..eae03e249 100644
--- a/doc/api/functions_type.html
+++ b/doc/api/functions_type.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_u.html b/doc/api/functions_u.html
index 376e6fc76..dd0e8c481 100644
--- a/doc/api/functions_u.html
+++ b/doc/api/functions_u.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_v.html b/doc/api/functions_v.html
index 1755f9eae..a593b4bde 100644
--- a/doc/api/functions_v.html
+++ b/doc/api/functions_v.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_vars.html b/doc/api/functions_vars.html
index 54c4783a1..1c7a01d92 100644
--- a/doc/api/functions_vars.html
+++ b/doc/api/functions_vars.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_w.html b/doc/api/functions_w.html
index 2ad3db5cc..79a5a797f 100644
--- a/doc/api/functions_w.html
+++ b/doc/api/functions_w.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/functions_~.html b/doc/api/functions_~.html
index fe349f79d..039327023 100644
--- a/doc/api/functions_~.html
+++ b/doc/api/functions_~.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/graph_legend.html b/doc/api/graph_legend.html
index 6391a4f26..cba77fd70 100644
--- a/doc/api/graph_legend.html
+++ b/doc/api/graph_legend.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__auth__reason__code.html b/doc/api/group__auth__reason__code.html
index f4b16cccc..d0c628bf7 100644
--- a/doc/api/group__auth__reason__code.html
+++ b/doc/api/group__auth__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__auth__v5.html b/doc/api/group__auth__v5.html
index 4aeb74f1b..d081272c8 100644
--- a/doc/api/group__auth__v5.html
+++ b/doc/api/group__auth__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__buffer.html b/doc/api/group__buffer.html
index 1833c8cae..135ec71d4 100644
--- a/doc/api/group__buffer.html
+++ b/doc/api/group__buffer.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__client.html b/doc/api/group__client.html
index c9d00df9e..e1da11a8f 100644
--- a/doc/api/group__client.html
+++ b/doc/api/group__client.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__client.js b/doc/api/group__client.js
index c89fe8646..9854edd85 100644
--- a/doc/api/group__client.js
+++ b/doc/api/group__client.js
@@ -11,8 +11,6 @@ var group__client =
       [ "executor_type", "classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d", null ],
       [ "lowest_layer_type", "classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef", null ],
       [ "next_layer_type", "classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7", null ],
-      [ "client", "classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df", null ],
-      [ "client", "classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f", null ],
       [ "client", "classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69", null ],
       [ "client", "classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70", null ],
       [ "acquire_unique_packet_id", "classasync__mqtt_1_1client.html#ab160ebb19bd7e51f8460e59a88deff86", null ],
diff --git a/doc/api/group__connack__v3__1__1.html b/doc/api/group__connack__v3__1__1.html
index c9842600d..d06c71272 100644
--- a/doc/api/group__connack__v3__1__1.html
+++ b/doc/api/group__connack__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__connack__v5.html b/doc/api/group__connack__v5.html
index 292101fb6..7c18141c4 100644
--- a/doc/api/group__connack__v5.html
+++ b/doc/api/group__connack__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__connect__reason__code.html b/doc/api/group__connect__reason__code.html
index f7eac27d7..d590b6941 100644
--- a/doc/api/group__connect__reason__code.html
+++ b/doc/api/group__connect__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__connect__return__code.html b/doc/api/group__connect__return__code.html
index 53e28480f..1458d2b29 100644
--- a/doc/api/group__connect__return__code.html
+++ b/doc/api/group__connect__return__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__connect__v3__1__1.html b/doc/api/group__connect__v3__1__1.html
index 4901ab62c..db27a7979 100644
--- a/doc/api/group__connect__v3__1__1.html
+++ b/doc/api/group__connect__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__connect__v5.html b/doc/api/group__connect__v5.html
index 35d8d978a..df067a139 100644
--- a/doc/api/group__connect__v5.html
+++ b/doc/api/group__connect__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__connection.html b/doc/api/group__connection.html
index bf35507f0..23e939b66 100644
--- a/doc/api/group__connection.html
+++ b/doc/api/group__connection.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__disconnect__reason__code.html b/doc/api/group__disconnect__reason__code.html
index 402145aa4..de939035b 100644
--- a/doc/api/group__disconnect__reason__code.html
+++ b/doc/api/group__disconnect__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__disconnect__v3__1__1.html b/doc/api/group__disconnect__v3__1__1.html
index 81d5cc870..b367fa039 100644
--- a/doc/api/group__disconnect__v3__1__1.html
+++ b/doc/api/group__disconnect__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__disconnect__v5.html b/doc/api/group__disconnect__v5.html
index f330ff9df..2b474a940 100644
--- a/doc/api/group__disconnect__v5.html
+++ b/doc/api/group__disconnect__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__endpoint.html b/doc/api/group__endpoint.html
index 6fa0d1389..7c6daa3d0 100644
--- a/doc/api/group__endpoint.html
+++ b/doc/api/group__endpoint.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__error.html b/doc/api/group__error.html
index 89890704e..0743dbe3a 100644
--- a/doc/api/group__error.html
+++ b/doc/api/group__error.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__error__reporting.html b/doc/api/group__error__reporting.html
index 4e95e9efd..fc55bd36e 100644
--- a/doc/api/group__error__reporting.html
+++ b/doc/api/group__error__reporting.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__log.html b/doc/api/group__log.html
index 6e1e8f6ff..d3c364798 100644
--- a/doc/api/group__log.html
+++ b/doc/api/group__log.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__mqtt.html b/doc/api/group__mqtt.html
index 028c99719..45770837a 100644
--- a/doc/api/group__mqtt.html
+++ b/doc/api/group__mqtt.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__mqtt__error.html b/doc/api/group__mqtt__error.html
index 259bc66a4..ce0e8d053 100644
--- a/doc/api/group__mqtt__error.html
+++ b/doc/api/group__mqtt__error.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__packet.html b/doc/api/group__packet.html
index cd41cf7bb..26ea83a6b 100644
--- a/doc/api/group__packet.html
+++ b/doc/api/group__packet.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__packet__detail.html b/doc/api/group__packet__detail.html
index e7db55dc5..c59372c41 100644
--- a/doc/api/group__packet__detail.html
+++ b/doc/api/group__packet__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__packet__v3__1__1.html b/doc/api/group__packet__v3__1__1.html
index 93b5050b6..6ff2bed55 100644
--- a/doc/api/group__packet__v3__1__1.html
+++ b/doc/api/group__packet__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__packet__v5.html b/doc/api/group__packet__v5.html
index 8aa2e280b..457627dea 100644
--- a/doc/api/group__packet__v5.html
+++ b/doc/api/group__packet__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__packet__variant.html b/doc/api/group__packet__variant.html
index fbb6bfaf0..d2ae606b9 100644
--- a/doc/api/group__packet__variant.html
+++ b/doc/api/group__packet__variant.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__packet__variant__detail.html b/doc/api/group__packet__variant__detail.html
index c7ea84011..da0515ca6 100644
--- a/doc/api/group__packet__variant__detail.html
+++ b/doc/api/group__packet__variant__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pingreq__v3__1__1.html b/doc/api/group__pingreq__v3__1__1.html
index 39bf620e7..bb19dc092 100644
--- a/doc/api/group__pingreq__v3__1__1.html
+++ b/doc/api/group__pingreq__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pingreq__v5.html b/doc/api/group__pingreq__v5.html
index d9e2dfe33..be07cd6d6 100644
--- a/doc/api/group__pingreq__v5.html
+++ b/doc/api/group__pingreq__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pingresp__v3__1__1.html b/doc/api/group__pingresp__v3__1__1.html
index c0c6980bc..39ab31400 100644
--- a/doc/api/group__pingresp__v3__1__1.html
+++ b/doc/api/group__pingresp__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pingresp__v5.html b/doc/api/group__pingresp__v5.html
index 41a0b5530..cddfbb14d 100644
--- a/doc/api/group__pingresp__v5.html
+++ b/doc/api/group__pingresp__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__predefined__customize.html b/doc/api/group__predefined__customize.html
index 900fc3adf..1a581fb2a 100644
--- a/doc/api/group__predefined__customize.html
+++ b/doc/api/group__predefined__customize.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__predefined__layer.html b/doc/api/group__predefined__layer.html
index 55ecbd6b5..ead4ce6c6 100644
--- a/doc/api/group__predefined__layer.html
+++ b/doc/api/group__predefined__layer.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__predefined__layer__mqtt.html b/doc/api/group__predefined__layer__mqtt.html
index 843275534..0d4e53a7d 100644
--- a/doc/api/group__predefined__layer__mqtt.html
+++ b/doc/api/group__predefined__layer__mqtt.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__predefined__layer__mqtts.html b/doc/api/group__predefined__layer__mqtts.html
index 4dd27da4c..d6233b1d2 100644
--- a/doc/api/group__predefined__layer__mqtts.html
+++ b/doc/api/group__predefined__layer__mqtts.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__predefined__layer__ws.html b/doc/api/group__predefined__layer__ws.html
index 382685167..19fb92fbd 100644
--- a/doc/api/group__predefined__layer__ws.html
+++ b/doc/api/group__predefined__layer__ws.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__predefined__layer__wss.html b/doc/api/group__predefined__layer__wss.html
index 96f63a6cf..e0fe6d7a3 100644
--- a/doc/api/group__predefined__layer__wss.html
+++ b/doc/api/group__predefined__layer__wss.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__property.html b/doc/api/group__property.html
index dd47dd7be..c31948f51 100644
--- a/doc/api/group__property.html
+++ b/doc/api/group__property.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__property__internal.html b/doc/api/group__property__internal.html
index b15665ea7..1fe90d5b0 100644
--- a/doc/api/group__property__internal.html
+++ b/doc/api/group__property__internal.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__property__variant.html b/doc/api/group__property__variant.html
index 5f4059dc8..14bcbbbab 100644
--- a/doc/api/group__property__variant.html
+++ b/doc/api/group__property__variant.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__puback__reason__code.html b/doc/api/group__puback__reason__code.html
index 95573af96..99d5f2ca7 100644
--- a/doc/api/group__puback__reason__code.html
+++ b/doc/api/group__puback__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__puback__v3__1__1.html b/doc/api/group__puback__v3__1__1.html
index 430d23685..f61dbad2f 100644
--- a/doc/api/group__puback__v3__1__1.html
+++ b/doc/api/group__puback__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__puback__v3__1__1__detail.html b/doc/api/group__puback__v3__1__1__detail.html
index 961fbd5ff..fde5916a4 100644
--- a/doc/api/group__puback__v3__1__1__detail.html
+++ b/doc/api/group__puback__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__puback__v5.html b/doc/api/group__puback__v5.html
index 5665ee8de..3a670f6b3 100644
--- a/doc/api/group__puback__v5.html
+++ b/doc/api/group__puback__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__puback__v5__detail.html b/doc/api/group__puback__v5__detail.html
index 09751d83f..32947c7fc 100644
--- a/doc/api/group__puback__v5__detail.html
+++ b/doc/api/group__puback__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubcomp__reason__code.html b/doc/api/group__pubcomp__reason__code.html
index 10cd4f585..7f033f3f5 100644
--- a/doc/api/group__pubcomp__reason__code.html
+++ b/doc/api/group__pubcomp__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubcomp__v3__1__1.html b/doc/api/group__pubcomp__v3__1__1.html
index e25c255ba..6a26e115f 100644
--- a/doc/api/group__pubcomp__v3__1__1.html
+++ b/doc/api/group__pubcomp__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubcomp__v3__1__1__detail.html b/doc/api/group__pubcomp__v3__1__1__detail.html
index aece6818a..8680bd82f 100644
--- a/doc/api/group__pubcomp__v3__1__1__detail.html
+++ b/doc/api/group__pubcomp__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubcomp__v5.html b/doc/api/group__pubcomp__v5.html
index 177801c59..0214baf2e 100644
--- a/doc/api/group__pubcomp__v5.html
+++ b/doc/api/group__pubcomp__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubcomp__v5__detail.html b/doc/api/group__pubcomp__v5__detail.html
index 420da653d..afc822a02 100644
--- a/doc/api/group__pubcomp__v5__detail.html
+++ b/doc/api/group__pubcomp__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__publish__options.html b/doc/api/group__publish__options.html
index 8f46c7f4b..4f156160c 100644
--- a/doc/api/group__publish__options.html
+++ b/doc/api/group__publish__options.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__publish__v3__1__1.html b/doc/api/group__publish__v3__1__1.html
index b81cfe3f4..3ff12d4c2 100644
--- a/doc/api/group__publish__v3__1__1.html
+++ b/doc/api/group__publish__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__publish__v3__1__1__detail.html b/doc/api/group__publish__v3__1__1__detail.html
index 27a0aebdd..60661bc98 100644
--- a/doc/api/group__publish__v3__1__1__detail.html
+++ b/doc/api/group__publish__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__publish__v5.html b/doc/api/group__publish__v5.html
index 7d6c4d398..48928b2ea 100644
--- a/doc/api/group__publish__v5.html
+++ b/doc/api/group__publish__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__publish__v5__detail.html b/doc/api/group__publish__v5__detail.html
index 3a533e880..d6bdbef10 100644
--- a/doc/api/group__publish__v5__detail.html
+++ b/doc/api/group__publish__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrec__reason__code.html b/doc/api/group__pubrec__reason__code.html
index cb825e948..d80658f7a 100644
--- a/doc/api/group__pubrec__reason__code.html
+++ b/doc/api/group__pubrec__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrec__v3__1__1.html b/doc/api/group__pubrec__v3__1__1.html
index 4c94f3be2..4ff438567 100644
--- a/doc/api/group__pubrec__v3__1__1.html
+++ b/doc/api/group__pubrec__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrec__v3__1__1__detail.html b/doc/api/group__pubrec__v3__1__1__detail.html
index 2dee67838..3b0f0f9ca 100644
--- a/doc/api/group__pubrec__v3__1__1__detail.html
+++ b/doc/api/group__pubrec__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrec__v5.html b/doc/api/group__pubrec__v5.html
index 75847cf35..e3ae9c9f6 100644
--- a/doc/api/group__pubrec__v5.html
+++ b/doc/api/group__pubrec__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrec__v5__detail.html b/doc/api/group__pubrec__v5__detail.html
index d07bc5afb..e819cb0fd 100644
--- a/doc/api/group__pubrec__v5__detail.html
+++ b/doc/api/group__pubrec__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrel__reason__code.html b/doc/api/group__pubrel__reason__code.html
index acc7371d2..f4ce4badb 100644
--- a/doc/api/group__pubrel__reason__code.html
+++ b/doc/api/group__pubrel__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrel__v3__1__1.html b/doc/api/group__pubrel__v3__1__1.html
index 949f6ec34..aba1d7304 100644
--- a/doc/api/group__pubrel__v3__1__1.html
+++ b/doc/api/group__pubrel__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrel__v3__1__1__detail.html b/doc/api/group__pubrel__v3__1__1__detail.html
index bf7fd2166..7721ae641 100644
--- a/doc/api/group__pubrel__v3__1__1__detail.html
+++ b/doc/api/group__pubrel__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrel__v5.html b/doc/api/group__pubrel__v5.html
index 044200913..83cfa0e1d 100644
--- a/doc/api/group__pubrel__v5.html
+++ b/doc/api/group__pubrel__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__pubrel__v5__detail.html b/doc/api/group__pubrel__v5__detail.html
index 548787842..b111491fa 100644
--- a/doc/api/group__pubrel__v5__detail.html
+++ b/doc/api/group__pubrel__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__qos.html b/doc/api/group__qos.html
index fc07e5aeb..10a152450 100644
--- a/doc/api/group__qos.html
+++ b/doc/api/group__qos.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__role.html b/doc/api/group__role.html
index 57207f049..240f456e6 100644
--- a/doc/api/group__role.html
+++ b/doc/api/group__role.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__store__packet__variant.html b/doc/api/group__store__packet__variant.html
index 9a4ab8f8c..b67d66bd4 100644
--- a/doc/api/group__store__packet__variant.html
+++ b/doc/api/group__store__packet__variant.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__store__packet__variant__detail.html b/doc/api/group__store__packet__variant__detail.html
index 9924e2884..fbc401c8c 100644
--- a/doc/api/group__store__packet__variant__detail.html
+++ b/doc/api/group__store__packet__variant__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__suback__reason__code.html b/doc/api/group__suback__reason__code.html
index 88a18146d..b71f8d8ac 100644
--- a/doc/api/group__suback__reason__code.html
+++ b/doc/api/group__suback__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__suback__return__code.html b/doc/api/group__suback__return__code.html
index b0fd4fd15..3fe8af187 100644
--- a/doc/api/group__suback__return__code.html
+++ b/doc/api/group__suback__return__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__suback__v3__1__1.html b/doc/api/group__suback__v3__1__1.html
index 963c47196..75681effe 100644
--- a/doc/api/group__suback__v3__1__1.html
+++ b/doc/api/group__suback__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__suback__v3__1__1__detail.html b/doc/api/group__suback__v3__1__1__detail.html
index f87b0efd8..dc5b78e0b 100644
--- a/doc/api/group__suback__v3__1__1__detail.html
+++ b/doc/api/group__suback__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__suback__v5.html b/doc/api/group__suback__v5.html
index 05e8ac613..47cd6094f 100644
--- a/doc/api/group__suback__v5.html
+++ b/doc/api/group__suback__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__suback__v5__detail.html b/doc/api/group__suback__v5__detail.html
index d84f78fa9..bb61741e8 100644
--- a/doc/api/group__suback__v5__detail.html
+++ b/doc/api/group__suback__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__subscribe__options.html b/doc/api/group__subscribe__options.html
index 1b78efa04..c7e15280e 100644
--- a/doc/api/group__subscribe__options.html
+++ b/doc/api/group__subscribe__options.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__subscribe__v3__1__1.html b/doc/api/group__subscribe__v3__1__1.html
index 98975905c..fc5cad493 100644
--- a/doc/api/group__subscribe__v3__1__1.html
+++ b/doc/api/group__subscribe__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__subscribe__v3__1__1__detail.html b/doc/api/group__subscribe__v3__1__1__detail.html
index b9e5bef7d..d49beb727 100644
--- a/doc/api/group__subscribe__v3__1__1__detail.html
+++ b/doc/api/group__subscribe__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__subscribe__v5.html b/doc/api/group__subscribe__v5.html
index 881be53d8..49ccbd8c3 100644
--- a/doc/api/group__subscribe__v5.html
+++ b/doc/api/group__subscribe__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__subscribe__v5__detail.html b/doc/api/group__subscribe__v5__detail.html
index 515a97341..36dfdc2e0 100644
--- a/doc/api/group__subscribe__v5__detail.html
+++ b/doc/api/group__subscribe__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__underlying__customize.html b/doc/api/group__underlying__customize.html
index 1df7ba75d..7f6a0d9e4 100644
--- a/doc/api/group__underlying__customize.html
+++ b/doc/api/group__underlying__customize.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__underlying__layer.html b/doc/api/group__underlying__layer.html
index e370d0156..1f60eafcd 100644
--- a/doc/api/group__underlying__layer.html
+++ b/doc/api/group__underlying__layer.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsuback__reason__code.html b/doc/api/group__unsuback__reason__code.html
index 9e8357473..6d7d3fe74 100644
--- a/doc/api/group__unsuback__reason__code.html
+++ b/doc/api/group__unsuback__reason__code.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsuback__v3__1__1.html b/doc/api/group__unsuback__v3__1__1.html
index 920cb2e81..0b7b16e32 100644
--- a/doc/api/group__unsuback__v3__1__1.html
+++ b/doc/api/group__unsuback__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsuback__v3__1__1__detail.html b/doc/api/group__unsuback__v3__1__1__detail.html
index 368c7f75d..2c7ca5014 100644
--- a/doc/api/group__unsuback__v3__1__1__detail.html
+++ b/doc/api/group__unsuback__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsuback__v5.html b/doc/api/group__unsuback__v5.html
index 353c6935f..18d019387 100644
--- a/doc/api/group__unsuback__v5.html
+++ b/doc/api/group__unsuback__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsuback__v5__detail.html b/doc/api/group__unsuback__v5__detail.html
index 67f7c6b1d..98ed16a83 100644
--- a/doc/api/group__unsuback__v5__detail.html
+++ b/doc/api/group__unsuback__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsubscribe__v3__1__1.html b/doc/api/group__unsubscribe__v3__1__1.html
index 81f3087ff..69ae65a3d 100644
--- a/doc/api/group__unsubscribe__v3__1__1.html
+++ b/doc/api/group__unsubscribe__v3__1__1.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsubscribe__v3__1__1__detail.html b/doc/api/group__unsubscribe__v3__1__1__detail.html
index 9a7b9b5fd..dc3135841 100644
--- a/doc/api/group__unsubscribe__v3__1__1__detail.html
+++ b/doc/api/group__unsubscribe__v3__1__1__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsubscribe__v5.html b/doc/api/group__unsubscribe__v5.html
index 62a505123..c70ad162f 100644
--- a/doc/api/group__unsubscribe__v5.html
+++ b/doc/api/group__unsubscribe__v5.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/group__unsubscribe__v5__detail.html b/doc/api/group__unsubscribe__v5__detail.html
index 701408597..dfca7bc2d 100644
--- a/doc/api/group__unsubscribe__v5__detail.html
+++ b/doc/api/group__unsubscribe__v5__detail.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/host__port_8hpp_source.html b/doc/api/host__port_8hpp_source.html
index 3eedb2749..202e9d1b9 100644
--- a/doc/api/host__port_8hpp_source.html
+++ b/doc/api/host__port_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/index.html b/doc/api/index.html
index 01cddf8d8..616e16aea 100644
--- a/doc/api/index.html
+++ b/doc/api/index.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/inline_8hpp_source.html b/doc/api/inline_8hpp_source.html
index b1ab96a0a..ae825717d 100644
--- a/doc/api/inline_8hpp_source.html
+++ b/doc/api/inline_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/ioc__queue_8hpp_source.html b/doc/api/ioc__queue_8hpp_source.html
index f04b91ac2..46f2e25c2 100644
--- a/doc/api/ioc__queue_8hpp_source.html
+++ b/doc/api/ioc__queue_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/json__like__out_8hpp_source.html b/doc/api/json__like__out_8hpp_source.html
index ae7b90e08..a065e4d1a 100644
--- a/doc/api/json__like__out_8hpp_source.html
+++ b/doc/api/json__like__out_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/log_8hpp_source.html b/doc/api/log_8hpp_source.html
index 476d8e80f..5824aa4dc 100644
--- a/doc/api/log_8hpp_source.html
+++ b/doc/api/log_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/make__shared__helper_8hpp_source.html b/doc/api/make__shared__helper_8hpp_source.html
index c4f1a6c41..657cf3ad2 100644
--- a/doc/api/make__shared__helper_8hpp_source.html
+++ b/doc/api/make__shared__helper_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/move_8hpp_source.html b/doc/api/move_8hpp_source.html
index 853af94b2..01a612e35 100644
--- a/doc/api/move_8hpp_source.html
+++ b/doc/api/move_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/mqtt_8hpp_source.html b/doc/api/mqtt_8hpp_source.html
index 76513e322..af279b558 100644
--- a/doc/api/mqtt_8hpp_source.html
+++ b/doc/api/mqtt_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/mqtts_8hpp_source.html b/doc/api/mqtts_8hpp_source.html
index f7b84a4a6..b86a848a8 100644
--- a/doc/api/mqtts_8hpp_source.html
+++ b/doc/api/mqtts_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/navtreedata.js b/doc/api/navtreedata.js
index 48ef9fdc0..826209652 100644
--- a/doc/api/navtreedata.js
+++ b/doc/api/navtreedata.js
@@ -46,12 +46,12 @@ var NAVTREE =
 var NAVTREEINDEX =
 [
 "all_8hpp_source.html",
-"classasync__mqtt_1_1property_1_1maximum__qos.html",
-"classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#a98c6e2957c22b01c57686ea97612c11b",
-"functions_func.html",
-"group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2acea782ea07bb660f81366046a7d883e7a10",
+"classasync__mqtt_1_1property_1_1maximum__qos.html#ac0b48992952a2c87d7b8b9c182725427",
+"classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#ae8f845776d61cced7df729f440a54830",
+"functions_func_b.html",
+"group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2aceab9946627146da7a2978d83ef72ec517e",
 "group__qos.html#ga7e7341552a092506c39d7c2554b10423",
-"structasync__mqtt_1_1pub_1_1opts.html#ad406db591c5f28508143b9f885b12be1"
+"structasync__mqtt_1_1pub_1_1opts.html#ad9994dd66c0562a4a568da58065690e1"
 ];
 
 var SYNCONMSG = 'click to disable panel synchronisation';
diff --git a/doc/api/navtreeindex0.js b/doc/api/navtreeindex0.js
index 99e4d826a..b9f670e01 100644
--- a/doc/api/navtreeindex0.js
+++ b/doc/api/navtreeindex0.js
@@ -165,43 +165,41 @@ var NAVTREEINDEX0 =
 "classasync__mqtt_1_1buffer.html#afeea408cf2d0d3c90d1b36b7cdd3bc60":[0,2,2,0,0,22],
 "classasync__mqtt_1_1buffer.html#affa80c740527fd62f738cc271bc9c702":[0,2,2,0,0,27],
 "classasync__mqtt_1_1client.html":[0,0,0,0],
-"classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69":[0,0,0,0,8],
-"classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2":[0,0,0,0,35],
-"classasync__mqtt_1_1client.html#a107f857b734a01cfeb6f8fc7894e60f1":[0,0,0,0,12],
-"classasync__mqtt_1_1client.html#a10936f4e6d279d8fd869c6774f65dbaf":[0,0,0,0,21],
-"classasync__mqtt_1_1client.html#a243692c7f749de1b589c665401a5b43a":[0,0,0,0,29],
-"classasync__mqtt_1_1client.html#a2574049a028672d01dcb4a49d80dec27":[0,0,0,0,19],
-"classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7":[0,0,0,0,22],
-"classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc":[0,0,0,0,32],
-"classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7":[0,0,0,0,38],
-"classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28":[0,0,0,0,28],
-"classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d":[0,0,0,0,24],
+"classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69":[0,0,0,0,6],
+"classasync__mqtt_1_1client.html#a09f09518ac6e775b09519080a96af3a2":[0,0,0,0,33],
+"classasync__mqtt_1_1client.html#a107f857b734a01cfeb6f8fc7894e60f1":[0,0,0,0,10],
+"classasync__mqtt_1_1client.html#a10936f4e6d279d8fd869c6774f65dbaf":[0,0,0,0,19],
+"classasync__mqtt_1_1client.html#a243692c7f749de1b589c665401a5b43a":[0,0,0,0,27],
+"classasync__mqtt_1_1client.html#a2574049a028672d01dcb4a49d80dec27":[0,0,0,0,17],
+"classasync__mqtt_1_1client.html#a29e1d876f3ec12c7a8d69c406be15fc7":[0,0,0,0,20],
+"classasync__mqtt_1_1client.html#a2a7414f348afda7a9059135338ddaadc":[0,0,0,0,30],
+"classasync__mqtt_1_1client.html#a3f9ba18339a5788f7d4386845eabfbe7":[0,0,0,0,36],
+"classasync__mqtt_1_1client.html#a408de6451241efe9acb6d8f671228e28":[0,0,0,0,26],
+"classasync__mqtt_1_1client.html#a449daed4cb9f6cb3d417a9bdcb6f092d":[0,0,0,0,22],
 "classasync__mqtt_1_1client.html#a4eaa1645f73cbdc77125db56b09bd309":[0,0,0,0,2],
-"classasync__mqtt_1_1client.html#a53ecf68e9242a4355251ad8abbbebd93":[0,0,0,0,23],
-"classasync__mqtt_1_1client.html#a565335cdfde52860dcfcb483624b6b7e":[0,0,0,0,34],
-"classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f":[0,0,0,0,26],
-"classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2":[0,0,0,0,33],
-"classasync__mqtt_1_1client.html#a6808a6f7f9535ec152dcc9ee430caf92":[0,0,0,0,20],
+"classasync__mqtt_1_1client.html#a53ecf68e9242a4355251ad8abbbebd93":[0,0,0,0,21],
+"classasync__mqtt_1_1client.html#a565335cdfde52860dcfcb483624b6b7e":[0,0,0,0,32],
+"classasync__mqtt_1_1client.html#a56ea5843ac36b21e1c5cabd6dec4416f":[0,0,0,0,24],
+"classasync__mqtt_1_1client.html#a5e091785f9ed21afc1aeaf9a09ccebb2":[0,0,0,0,31],
+"classasync__mqtt_1_1client.html#a6808a6f7f9535ec152dcc9ee430caf92":[0,0,0,0,18],
 "classasync__mqtt_1_1client.html#a69c86bce11c102ac589f446bff5aaff7":[0,0,0,0,5],
-"classasync__mqtt_1_1client.html#a825c14790ca009436f20c1b2c7952204":[0,0,0,0,17],
-"classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158":[0,0,0,0,27],
+"classasync__mqtt_1_1client.html#a825c14790ca009436f20c1b2c7952204":[0,0,0,0,15],
+"classasync__mqtt_1_1client.html#a84882203ef55d144ed04d71d25d5a158":[0,0,0,0,25],
 "classasync__mqtt_1_1client.html#a93814f9dcc11fb4295897ac5317c276d":[0,0,0,0,3],
-"classasync__mqtt_1_1client.html#a9920aeeb283f6ff9a9eb164a52f1eb5c":[0,0,0,0,13],
-"classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df":[0,0,0,0,6],
-"classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110":[0,0,0,0,14],
-"classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649":[0,0,0,0,37],
-"classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d":[0,0,0,0,30],
-"classasync__mqtt_1_1client.html#ab160ebb19bd7e51f8460e59a88deff86":[0,0,0,0,10],
-"classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70":[0,0,0,0,9],
-"classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825":[0,0,0,0,25],
-"classasync__mqtt_1_1client.html#acbe876628df6963609eb6e9aa4a0729e":[0,0,0,0,18],
-"classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e":[0,0,0,0,15],
-"classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f":[0,0,0,0,7],
-"classasync__mqtt_1_1client.html#ae866b887888316e02f14487ec2892a23":[0,0,0,0,11],
-"classasync__mqtt_1_1client.html#aea02e31d5f8e45f5eb7eb886f7a5068a":[0,0,0,0,16],
+"classasync__mqtt_1_1client.html#a9920aeeb283f6ff9a9eb164a52f1eb5c":[0,0,0,0,11],
+"classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110":[0,0,0,0,12],
+"classasync__mqtt_1_1client.html#aa56df38927dcfa249981a336cd14c649":[0,0,0,0,35],
+"classasync__mqtt_1_1client.html#aad4b874d0e7adedc8f8714f2acc2b98d":[0,0,0,0,28],
+"classasync__mqtt_1_1client.html#ab160ebb19bd7e51f8460e59a88deff86":[0,0,0,0,8],
+"classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70":[0,0,0,0,7],
+"classasync__mqtt_1_1client.html#ac717d23602387557b4652841050f2825":[0,0,0,0,23],
+"classasync__mqtt_1_1client.html#acbe876628df6963609eb6e9aa4a0729e":[0,0,0,0,16],
+"classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e":[0,0,0,0,13],
+"classasync__mqtt_1_1client.html#ae866b887888316e02f14487ec2892a23":[0,0,0,0,9],
+"classasync__mqtt_1_1client.html#aea02e31d5f8e45f5eb7eb886f7a5068a":[0,0,0,0,14],
 "classasync__mqtt_1_1client.html#aeb5e89195f6b3080b218c321d4b6d7ef":[0,0,0,0,4],
-"classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf":[0,0,0,0,36],
-"classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806":[0,0,0,0,31],
+"classasync__mqtt_1_1client.html#aece04b491b26e3484ce5125748b86adf":[0,0,0,0,34],
+"classasync__mqtt_1_1client.html#af70a56e528cc0a32b2d5dbc5a43bc806":[0,0,0,0,29],
 "classasync__mqtt_1_1property_1_1assigned__client__identifier.html":[0,2,1,0,9],
 "classasync__mqtt_1_1property_1_1assigned__client__identifier.html#a1f5972f67e057781af6cc9c0e237b319":[0,2,1,0,9,2],
 "classasync__mqtt_1_1property_1_1assigned__client__identifier.html#a2e34cf171a5b9b714f323bcb68971c52":[0,2,1,0,9,4],
@@ -249,5 +247,7 @@ var NAVTREEINDEX0 =
 "classasync__mqtt_1_1property_1_1correlation__data.html#ad90430bf94a02716f7c9aebb4c486dd5":[0,2,1,0,6,2],
 "classasync__mqtt_1_1property_1_1maximum__packet__size.html":[0,2,1,0,25],
 "classasync__mqtt_1_1property_1_1maximum__packet__size.html#a26611f590d9a5ea6a3914d2aedae2d8f":[0,2,1,0,25,0],
-"classasync__mqtt_1_1property_1_1maximum__packet__size.html#a34262695c6ff573cdf6fcc7037cb8180":[0,2,1,0,25,1]
+"classasync__mqtt_1_1property_1_1maximum__packet__size.html#a34262695c6ff573cdf6fcc7037cb8180":[0,2,1,0,25,1],
+"classasync__mqtt_1_1property_1_1maximum__qos.html":[0,2,1,0,22],
+"classasync__mqtt_1_1property_1_1maximum__qos.html#a9b06ebeadc1ba6c6ed0a965c81ba2b70":[0,2,1,0,22,1]
 };
diff --git a/doc/api/navtreeindex1.js b/doc/api/navtreeindex1.js
index 026806069..71beccdd9 100644
--- a/doc/api/navtreeindex1.js
+++ b/doc/api/navtreeindex1.js
@@ -1,7 +1,5 @@
 var NAVTREEINDEX1 =
 {
-"classasync__mqtt_1_1property_1_1maximum__qos.html":[0,2,1,0,22],
-"classasync__mqtt_1_1property_1_1maximum__qos.html#a9b06ebeadc1ba6c6ed0a965c81ba2b70":[0,2,1,0,22,1],
 "classasync__mqtt_1_1property_1_1maximum__qos.html#ac0b48992952a2c87d7b8b9c182725427":[0,2,1,0,22,0],
 "classasync__mqtt_1_1property_1_1message__expiry__interval.html":[0,2,1,0,3],
 "classasync__mqtt_1_1property_1_1message__expiry__interval.html#a599ad258dabd588cda82ace5d95394ac":[0,2,1,0,3,0],
@@ -249,5 +247,7 @@ var NAVTREEINDEX1 =
 "classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html":[0,2,0,3,0],
 "classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#a45c11f40101d5997ec0d4e406f3b275a":[0,2,0,3,0,0],
 "classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#a6e602bb1e96b31452d5fee7cb31132f9":[0,2,0,3,0,4],
-"classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#a83cf6dc8b65e35c2414abbbe496f38db":[0,2,0,3,0,1]
+"classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#a83cf6dc8b65e35c2414abbbe496f38db":[0,2,0,3,0,1],
+"classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#a98c6e2957c22b01c57686ea97612c11b":[0,2,0,3,0,3],
+"classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#abf5558c0404c4e825a7ff7752b01e524":[0,2,0,3,0,5]
 };
diff --git a/doc/api/navtreeindex2.js b/doc/api/navtreeindex2.js
index f4529feef..33bf5d7ba 100644
--- a/doc/api/navtreeindex2.js
+++ b/doc/api/navtreeindex2.js
@@ -1,7 +1,5 @@
 var NAVTREEINDEX2 =
 {
-"classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#a98c6e2957c22b01c57686ea97612c11b":[0,2,0,3,0,3],
-"classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#abf5558c0404c4e825a7ff7752b01e524":[0,2,0,3,0,5],
 "classasync__mqtt_1_1v3__1__1_1_1pingreq__packet.html#ae8f845776d61cced7df729f440a54830":[0,2,0,3,0,2],
 "classasync__mqtt_1_1v3__1__1_1_1pingresp__packet.html":[0,2,0,4,0],
 "classasync__mqtt_1_1v3__1__1_1_1pingresp__packet.html#a24bda6c6eb11a3ab3e86fb12034228da":[0,2,0,4,0,0],
@@ -249,5 +247,7 @@ var NAVTREEINDEX2 =
 "functions_c.html":[1,2,0,2],
 "functions_d.html":[1,2,0,3],
 "functions_e.html":[1,2,0,4],
-"functions_f.html":[1,2,0,5]
+"functions_f.html":[1,2,0,5],
+"functions_func.html":[1,2,1],
+"functions_func.html":[1,2,1,0]
 };
diff --git a/doc/api/navtreeindex3.js b/doc/api/navtreeindex3.js
index ca58edcd0..6a8b436aa 100644
--- a/doc/api/navtreeindex3.js
+++ b/doc/api/navtreeindex3.js
@@ -1,7 +1,5 @@
 var NAVTREEINDEX3 =
 {
-"functions_func.html":[1,2,1],
-"functions_func.html":[1,2,1,0],
 "functions_func_b.html":[1,2,1,1],
 "functions_func_c.html":[1,2,1,2],
 "functions_func_d.html":[1,2,1,3],
@@ -249,5 +247,7 @@ var NAVTREEINDEX3 =
 "group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2acea0639b981c4678706949ab313c9df2d1f":[0,1,0,0,0,5],
 "group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2acea13bfb719ca3c626b0539a1646d46e584":[0,1,0,0,0,0],
 "group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2acea21c76d7f1a3498b34e970521bb8ace9e":[0,1,0,0,0,1],
-"group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2acea4a82a29d3501e81008a42fced4b5cc73":[0,1,0,0,0,3]
+"group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2acea4a82a29d3501e81008a42fced4b5cc73":[0,1,0,0,0,3],
+"group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2acea782ea07bb660f81366046a7d883e7a10":[0,1,0,0,0,6],
+"group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2aceaa03dac59fb47f7cd54f99f8bac913737":[0,1,0,0,0,2]
 };
diff --git a/doc/api/navtreeindex4.js b/doc/api/navtreeindex4.js
index 415842bd9..c3eaf6215 100644
--- a/doc/api/navtreeindex4.js
+++ b/doc/api/navtreeindex4.js
@@ -1,7 +1,5 @@
 var NAVTREEINDEX4 =
 {
-"group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2acea782ea07bb660f81366046a7d883e7a10":[0,1,0,0,0,6],
-"group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2aceaa03dac59fb47f7cd54f99f8bac913737":[0,1,0,0,0,2],
 "group__mqtt__error.html#ggab680615570fddcfb9aab72ea9e9d2aceab9946627146da7a2978d83ef72ec517e":[0,1,0,0,0,4],
 "group__packet.html":[0,2],
 "group__packet.html#ga3a62fe7e9ea30aeb0f7634103696509d":[0,2,10],
@@ -249,5 +247,7 @@ var NAVTREEINDEX4 =
 "group__qos.html#ga38e773082414bb272ab22275c56eb4df":[0,2,0,7,1,0],
 "group__qos.html#ga38e773082414bb272ab22275c56eb4df":[0,2,0,11,0,0],
 "group__qos.html#ga38e773082414bb272ab22275c56eb4df":[0,2,1,9,1,0],
-"group__qos.html#ga38e773082414bb272ab22275c56eb4df":[0,2,1,13,0,0]
+"group__qos.html#ga38e773082414bb272ab22275c56eb4df":[0,2,1,13,0,0],
+"group__qos.html#ga7e7341552a092506c39d7c2554b10423":[0,2,0,7,1,1],
+"group__qos.html#ga7e7341552a092506c39d7c2554b10423":[0,2,0,11,0,1]
 };
diff --git a/doc/api/navtreeindex5.js b/doc/api/navtreeindex5.js
index a757e5424..9561e9bff 100644
--- a/doc/api/navtreeindex5.js
+++ b/doc/api/navtreeindex5.js
@@ -1,7 +1,5 @@
 var NAVTREEINDEX5 =
 {
-"group__qos.html#ga7e7341552a092506c39d7c2554b10423":[0,2,0,7,1,1],
-"group__qos.html#ga7e7341552a092506c39d7c2554b10423":[0,2,0,11,0,1],
 "group__qos.html#ga7e7341552a092506c39d7c2554b10423":[0,2,1,9,1,1],
 "group__qos.html#ga7e7341552a092506c39d7c2554b10423":[0,2,1,13,0,1],
 "group__qos.html#gad858b3dc3d6733e6ec7b1ff497f90583":[0,2,0,7,1,2],
@@ -249,5 +247,7 @@ var NAVTREEINDEX5 =
 "structasync__mqtt_1_1pub_1_1opts.html#aa12464e63b57cec10ba45773ff5d4acc":[0,2,0,7,0,0,12],
 "structasync__mqtt_1_1pub_1_1opts.html#aa12464e63b57cec10ba45773ff5d4acc":[0,2,1,9,0,0,12],
 "structasync__mqtt_1_1pub_1_1opts.html#ad2c8e9d949c50537023afb4bdc477957":[0,2,0,7,0,0,28],
-"structasync__mqtt_1_1pub_1_1opts.html#ad2c8e9d949c50537023afb4bdc477957":[0,2,1,9,0,0,28]
+"structasync__mqtt_1_1pub_1_1opts.html#ad2c8e9d949c50537023afb4bdc477957":[0,2,1,9,0,0,28],
+"structasync__mqtt_1_1pub_1_1opts.html#ad406db591c5f28508143b9f885b12be1":[0,2,0,7,0,0,26],
+"structasync__mqtt_1_1pub_1_1opts.html#ad406db591c5f28508143b9f885b12be1":[0,2,1,9,0,0,26]
 };
diff --git a/doc/api/navtreeindex6.js b/doc/api/navtreeindex6.js
index 447d2d1c9..d3e38e93d 100644
--- a/doc/api/navtreeindex6.js
+++ b/doc/api/navtreeindex6.js
@@ -1,7 +1,5 @@
 var NAVTREEINDEX6 =
 {
-"structasync__mqtt_1_1pub_1_1opts.html#ad406db591c5f28508143b9f885b12be1":[0,2,0,7,0,0,26],
-"structasync__mqtt_1_1pub_1_1opts.html#ad406db591c5f28508143b9f885b12be1":[0,2,1,9,0,0,26],
 "structasync__mqtt_1_1pub_1_1opts.html#ad9994dd66c0562a4a568da58065690e1":[0,2,0,7,0,0,29],
 "structasync__mqtt_1_1pub_1_1opts.html#ad9994dd66c0562a4a568da58065690e1":[0,2,1,9,0,0,29],
 "structasync__mqtt_1_1pub_1_1opts.html#aeaaed644f437a45bbc25b74d4b4a87ab":[0,2,0,7,0,0,3],
diff --git a/doc/api/overload_8hpp_source.html b/doc/api/overload_8hpp_source.html
index de30d205b..7123b229e 100644
--- a/doc/api/overload_8hpp_source.html
+++ b/doc/api/overload_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/packet__fwd_8hpp_source.html b/doc/api/packet__fwd_8hpp_source.html
index 7f8dd53a0..1c4a0c22d 100644
--- a/doc/api/packet__fwd_8hpp_source.html
+++ b/doc/api/packet__fwd_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/packet__helper_8hpp_source.html b/doc/api/packet__helper_8hpp_source.html
index 143802716..5b4ad942e 100644
--- a/doc/api/packet__helper_8hpp_source.html
+++ b/doc/api/packet__helper_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/packet__id__manager_8hpp_source.html b/doc/api/packet__id__manager_8hpp_source.html
index e82238d0e..4c31d8809 100644
--- a/doc/api/packet__id__manager_8hpp_source.html
+++ b/doc/api/packet__id__manager_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/packet__id__type_8hpp_source.html b/doc/api/packet__id__type_8hpp_source.html
index f8a77af69..7b298c35f 100644
--- a/doc/api/packet__id__type_8hpp_source.html
+++ b/doc/api/packet__id__type_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/packet__iterator_8hpp_source.html b/doc/api/packet__iterator_8hpp_source.html
index a36b7b0a6..cc1121e70 100644
--- a/doc/api/packet__iterator_8hpp_source.html
+++ b/doc/api/packet__iterator_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/packet__traits_8hpp_source.html b/doc/api/packet__traits_8hpp_source.html
index 313f6e103..3c3ed4a8e 100644
--- a/doc/api/packet__traits_8hpp_source.html
+++ b/doc/api/packet__traits_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/packet__variant_8hpp_source.html b/doc/api/packet__variant_8hpp_source.html
index 5d4f7fdd3..1633a67cb 100644
--- a/doc/api/packet__variant_8hpp_source.html
+++ b/doc/api/packet__variant_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/packet__variant__fwd_8hpp_source.html b/doc/api/packet__variant__fwd_8hpp_source.html
index cf60ea085..a09e2ea26 100644
--- a/doc/api/packet__variant__fwd_8hpp_source.html
+++ b/doc/api/packet__variant__fwd_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/property_8hpp_source.html b/doc/api/property_8hpp_source.html
index 40b9a5419..68d357a57 100644
--- a/doc/api/property_8hpp_source.html
+++ b/doc/api/property_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/property__id_8hpp_source.html b/doc/api/property__id_8hpp_source.html
index da6d77a85..dc3236ac5 100644
--- a/doc/api/property__id_8hpp_source.html
+++ b/doc/api/property__id_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/property__variant_8hpp_source.html b/doc/api/property__variant_8hpp_source.html
index 5d676fa19..b896013f3 100644
--- a/doc/api/property__variant_8hpp_source.html
+++ b/doc/api/property__variant_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/protocol__version_8hpp_source.html b/doc/api/protocol__version_8hpp_source.html
index 38b0c90e7..af7de6343 100644
--- a/doc/api/protocol__version_8hpp_source.html
+++ b/doc/api/protocol__version_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/pubopts_8hpp_source.html b/doc/api/pubopts_8hpp_source.html
index 6d4937b84..c57da581c 100644
--- a/doc/api/pubopts_8hpp_source.html
+++ b/doc/api/pubopts_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/qos_8hpp_source.html b/doc/api/qos_8hpp_source.html
index c0b8ddd72..8142c634e 100644
--- a/doc/api/qos_8hpp_source.html
+++ b/doc/api/qos_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/qos__util_8hpp_source.html b/doc/api/qos__util_8hpp_source.html
index bc1d318c9..4fa69b60c 100644
--- a/doc/api/qos__util_8hpp_source.html
+++ b/doc/api/qos__util_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/role_8hpp_source.html b/doc/api/role_8hpp_source.html
index 9e139fbaf..867995706 100644
--- a/doc/api/role_8hpp_source.html
+++ b/doc/api/role_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
@@ -122,7 +122,7 @@
 <div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span>} <span class="comment">// namespace async_mqtt</span></div>
 <div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span> </div>
 <div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="preprocessor">#endif </span><span class="comment">// ASYNC_MQTT_ROLE_HPP</span></div>
-<div class="ttc" id="aclassasync__mqtt_1_1client_html"><div class="ttname"><a href="classasync__mqtt_1_1client.html">async_mqtt::client</a></div><div class="ttdoc">MQTT client for casual usecases.</div><div class="ttdef"><b>Definition</b> client.hpp:81</div></div>
+<div class="ttc" id="aclassasync__mqtt_1_1client_html"><div class="ttname"><a href="classasync__mqtt_1_1client.html">async_mqtt::client</a></div><div class="ttdoc">MQTT client for casual usecases.</div><div class="ttdef"><b>Definition</b> client.hpp:82</div></div>
 <div class="ttc" id="agroup__role_html_ga83492944f4f6b69eb11ce917d1f27c4a"><div class="ttname"><a href="group__role.html#ga83492944f4f6b69eb11ce917d1f27c4a">async_mqtt::role</a></div><div class="ttdeci">role</div><div class="ttdoc">MQTT endpoint connection role.</div><div class="ttdef"><b>Definition</b> role.hpp:21</div></div>
 <div class="ttc" id="agroup__role_html_gga83492944f4f6b69eb11ce917d1f27c4aa100b8cad7cf2a56f6df78f171f97a1ec"><div class="ttname"><a href="group__role.html#gga83492944f4f6b69eb11ce917d1f27c4aa100b8cad7cf2a56f6df78f171f97a1ec">async_mqtt::role::any</a></div><div class="ttdeci">@ any</div><div class="ttdoc">can send all packets. (no check)</div></div>
 <div class="ttc" id="agroup__role_html_gga83492944f4f6b69eb11ce917d1f27c4aacf1e8c14e54505f60aa10ceb8d5d8ab3"><div class="ttname"><a href="group__role.html#gga83492944f4f6b69eb11ce917d1f27c4aacf1e8c14e54505f60aa10ceb8d5d8ab3">async_mqtt::role::server</a></div><div class="ttdeci">@ server</div></div>
diff --git a/doc/api/scope__guard_8hpp_source.html b/doc/api/scope__guard_8hpp_source.html
index 24b6ef5ed..b65839fed 100644
--- a/doc/api/scope__guard_8hpp_source.html
+++ b/doc/api/scope__guard_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/search/all_6.js b/doc/api/search/all_6.js
index 932a960cb..ddaf20ce8 100644
--- a/doc/api/search/all_6.js
+++ b/doc/api/search/all_6.js
@@ -8,7 +8,7 @@ var searchData=
   ['class_20for_20stored_20packets_20publish_20pubrel_5',['variant class for stored packets (PUBLISH, PUBREL)',['../group__store__packet__variant.html',1,'']]],
   ['clean_5fsession_6',['clean_session',['../classasync__mqtt_1_1v3__1__1_1_1connect__packet.html#a77c76294b8c6d4b21e3dbfa04a89be83',1,'async_mqtt::v3_1_1::connect_packet']]],
   ['clean_5fstart_7',['clean_start',['../classasync__mqtt_1_1v5_1_1connect__packet.html#a79b4fda95f1f4c3efa7c36126994b0d8',1,'async_mqtt::v5::connect_packet']]],
-  ['client_8',['client',['../classasync__mqtt_1_1client.html',1,'async_mqtt::client&lt; Version, NextLayer &gt;'],['../classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df',1,'async_mqtt::client::client(Args &amp;&amp;... args)'],['../classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f',1,'async_mqtt::client::client(client&lt; Version, Other &gt; &amp;&amp;other)'],['../classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69',1,'async_mqtt::client::client(this_type const &amp;)=delete'],['../classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70',1,'async_mqtt::client::client(this_type &amp;&amp;)=default'],['../group__role.html#gga83492944f4f6b69eb11ce917d1f27c4aa62608e08adc29a8d6dbc9754e659f125',1,'clientasync_mqtt'],['../group__client.html',1,'client (High level MQTT client)']]],
+  ['client_8',['client',['../classasync__mqtt_1_1client.html',1,'async_mqtt::client&lt; Version, NextLayer &gt;'],['../classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69',1,'async_mqtt::client::client(this_type const &amp;)=delete'],['../classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70',1,'async_mqtt::client::client(this_type &amp;&amp;)=default'],['../group__role.html#gga83492944f4f6b69eb11ce917d1f27c4aa62608e08adc29a8d6dbc9754e659f125',1,'clientasync_mqtt'],['../group__client.html',1,'client (High level MQTT client)']]],
   ['client_20high_20level_20mqtt_20client_9',['client (High level MQTT client)',['../group__client.html',1,'']]],
   ['client_20server_20broker_10',['endpoint (Packet level MQTT endpoint for client/server,broker)',['../group__endpoint.html',1,'']]],
   ['client_20server_20or_20both_11',['MQTT connection role (client, server or both)',['../group__role.html',1,'']]],
@@ -41,7 +41,7 @@ var searchData=
   ['correlation_5fdata_38',['correlation_data',['../classasync__mqtt_1_1property_1_1correlation__data.html',1,'async_mqtt::property::correlation_data'],['../classasync__mqtt_1_1property_1_1correlation__data.html#a3485faa745776197b7c7ec0ba6e3e1e6',1,'async_mqtt::property::correlation_data::correlation_data()'],['../group__property.html#gga5cb48750d7fa394639fc0dada2c34f89aece98a0ffeaca98ee2601250877fe12f',1,'correlation_dataasync_mqtt::property']]],
   ['counting_20immutable_20buffer_39',['Reference counting immutable buffer',['../group__buffer.html',1,'']]],
   ['crbegin_40',['crbegin',['../classasync__mqtt_1_1buffer.html#a92ed7db78da4b1cd5f8de8acab7a7bbe',1,'async_mqtt::buffer']]],
-  ['create_41',['create',['../classasync__mqtt_1_1basic__endpoint.html#ae3faa98c0f30e8df05ef02a6a1f4ed85',1,'async_mqtt::basic_endpoint']]],
+  ['create_41',['create',['../classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41',1,'async_mqtt::client::create()'],['../classasync__mqtt_1_1basic__endpoint.html#ae3faa98c0f30e8df05ef02a6a1f4ed85',1,'async_mqtt::basic_endpoint::create()']]],
   ['crend_42',['crend',['../classasync__mqtt_1_1buffer.html#affa80c740527fd62f738cc271bc9c702',1,'async_mqtt::buffer']]],
   ['customization_43',['underlying layer customization',['../group__underlying__customize.html',1,'']]],
   ['customize_44',['predefined underlying customize',['../group__predefined__customize.html',1,'']]],
diff --git a/doc/api/search/functions_2.js b/doc/api/search/functions_2.js
index 5c498fcd6..a01271d04 100644
--- a/doc/api/search/functions_2.js
+++ b/doc/api/search/functions_2.js
@@ -4,7 +4,7 @@ var searchData=
   ['cend_1',['cend',['../classasync__mqtt_1_1buffer.html#a6c0fddafd68f9a02bf999e13b46dce50',1,'async_mqtt::buffer']]],
   ['clean_5fsession_2',['clean_session',['../classasync__mqtt_1_1v3__1__1_1_1connect__packet.html#a77c76294b8c6d4b21e3dbfa04a89be83',1,'async_mqtt::v3_1_1::connect_packet']]],
   ['clean_5fstart_3',['clean_start',['../classasync__mqtt_1_1v5_1_1connect__packet.html#a79b4fda95f1f4c3efa7c36126994b0d8',1,'async_mqtt::v5::connect_packet']]],
-  ['client_4',['client',['../classasync__mqtt_1_1client.html#a9b17702ad539982547fa5dc3de34f8df',1,'async_mqtt::client::client(Args &amp;&amp;... args)'],['../classasync__mqtt_1_1client.html#ae422a3de6052d79df44db7f73994c54f',1,'async_mqtt::client::client(client&lt; Version, Other &gt; &amp;&amp;other)'],['../classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69',1,'async_mqtt::client::client(this_type const &amp;)=delete'],['../classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70',1,'async_mqtt::client::client(this_type &amp;&amp;)=default']]],
+  ['client_4',['client',['../classasync__mqtt_1_1client.html#a09c99f0a62f86b9449cbd2407d74be69',1,'async_mqtt::client::client(this_type const &amp;)=delete'],['../classasync__mqtt_1_1client.html#ab47c58452e33366ac3646846b9126a70',1,'async_mqtt::client::client(this_type &amp;&amp;)=default']]],
   ['client_5fid_5',['client_id',['../classasync__mqtt_1_1v3__1__1_1_1connect__packet.html#a3a494302ed12606ba6e907c8810f0ca6',1,'async_mqtt::v3_1_1::connect_packet::client_id()'],['../classasync__mqtt_1_1v5_1_1connect__packet.html#ad7fa9b1e168d2ad324cdfcf8925628d9',1,'async_mqtt::v5::connect_packet::client_id()']]],
   ['code_6',['code',['../classasync__mqtt_1_1v3__1__1_1_1connack__packet.html#ac2739356f6ba7a96a40ce0603d632093',1,'async_mqtt::v3_1_1::connack_packet::code()'],['../classasync__mqtt_1_1v5_1_1auth__packet.html#aac22f4d07a286273b3110258a872c0fc',1,'async_mqtt::v5::auth_packet::code()'],['../classasync__mqtt_1_1v5_1_1connack__packet.html#a7fc18769b638a100d65300ae84022330',1,'async_mqtt::v5::connack_packet::code()'],['../classasync__mqtt_1_1v5_1_1disconnect__packet.html#a266b66b6c83ae212720cb9c6d3230273',1,'async_mqtt::v5::disconnect_packet::code()'],['../classasync__mqtt_1_1v5_1_1basic__puback__packet.html#a9ff420757a073efa336ef4555cef12cf',1,'async_mqtt::v5::basic_puback_packet::code()'],['../classasync__mqtt_1_1v5_1_1basic__pubcomp__packet.html#a1aae36a6c1d3aa4690001368686da800',1,'async_mqtt::v5::basic_pubcomp_packet::code()'],['../classasync__mqtt_1_1v5_1_1basic__pubrec__packet.html#a18acb9fd8d4404d7ba64f2489630e84c',1,'async_mqtt::v5::basic_pubrec_packet::code()'],['../classasync__mqtt_1_1v5_1_1basic__pubrel__packet.html#a7f928cc17d9608e2930c2ed1b92608e3',1,'async_mqtt::v5::basic_pubrel_packet::code()']]],
   ['compare_7',['compare',['../classasync__mqtt_1_1buffer.html#aa7b3127002e0a9f2f0641ecad4daea24',1,'async_mqtt::buffer::compare(buffer const &amp;buf) const noexcept'],['../classasync__mqtt_1_1buffer.html#ae3256c4c867f85ebbe95ac1f83381a2a',1,'async_mqtt::buffer::compare(std::string_view const &amp;v) const noexcept'],['../classasync__mqtt_1_1buffer.html#aa87697e3a25d39f5cf79f86c0ceed63a',1,'async_mqtt::buffer::compare(size_type pos1, size_type count1, buffer const &amp;buf) const noexcept'],['../classasync__mqtt_1_1buffer.html#afeea408cf2d0d3c90d1b36b7cdd3bc60',1,'async_mqtt::buffer::compare(size_type pos1, size_type count1, std::string_view const &amp;v) const noexcept'],['../classasync__mqtt_1_1buffer.html#a54f450efa2f2cd9b99b9eeb734fae6ce',1,'async_mqtt::buffer::compare(size_type pos1, size_type count1, buffer const &amp;buf, size_type pos2, size_type count2) const noexcept'],['../classasync__mqtt_1_1buffer.html#a5b0285c947c7bbbffa30f1fb308647a7',1,'async_mqtt::buffer::compare(size_type pos1, size_type count1, std::string_view const &amp;v, size_type pos2, size_type count2) const noexcept'],['../classasync__mqtt_1_1buffer.html#afdc5067111459a6bd4877bf1259a4d5b',1,'async_mqtt::buffer::compare(char const *s) const noexcept'],['../classasync__mqtt_1_1buffer.html#a33e5f60628b2fd9845e849f4c694f40a',1,'async_mqtt::buffer::compare(size_type pos1, size_type count1, char const *s) const noexcept'],['../classasync__mqtt_1_1buffer.html#a88206280e6d162885e24543f3149537c',1,'async_mqtt::buffer::compare(size_type pos1, size_type count1, char const *s, size_type pos2, size_type count2) const noexcept']]],
@@ -18,6 +18,6 @@ var searchData=
   ['copy_15',['copy',['../classasync__mqtt_1_1buffer.html#a9554ca7b3e648e0d6a07b3a5c37c95a6',1,'async_mqtt::buffer']]],
   ['correlation_5fdata_16',['correlation_data',['../classasync__mqtt_1_1property_1_1correlation__data.html#a3485faa745776197b7c7ec0ba6e3e1e6',1,'async_mqtt::property::correlation_data']]],
   ['crbegin_17',['crbegin',['../classasync__mqtt_1_1buffer.html#a92ed7db78da4b1cd5f8de8acab7a7bbe',1,'async_mqtt::buffer']]],
-  ['create_18',['create',['../classasync__mqtt_1_1basic__endpoint.html#ae3faa98c0f30e8df05ef02a6a1f4ed85',1,'async_mqtt::basic_endpoint']]],
+  ['create_18',['create',['../classasync__mqtt_1_1client.html#a38459925809f8106efee03ade8e66c41',1,'async_mqtt::client::create()'],['../classasync__mqtt_1_1basic__endpoint.html#ae3faa98c0f30e8df05ef02a6a1f4ed85',1,'async_mqtt::basic_endpoint::create()']]],
   ['crend_19',['crend',['../classasync__mqtt_1_1buffer.html#affa80c740527fd62f738cc271bc9c702',1,'async_mqtt::buffer']]]
 ];
diff --git a/doc/api/setup__log_8hpp_source.html b/doc/api/setup__log_8hpp_source.html
index 30cb63862..c3f812d17 100644
--- a/doc/api/setup__log_8hpp_source.html
+++ b/doc/api/setup__log_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/shared__ptr__array_8hpp_source.html b/doc/api/shared__ptr__array_8hpp_source.html
index f809a2bd0..59ecd4a3a 100644
--- a/doc/api/shared__ptr__array_8hpp_source.html
+++ b/doc/api/shared__ptr__array_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/src_8hpp_source.html b/doc/api/src_8hpp_source.html
index 378af21af..572dd1cd2 100644
--- a/doc/api/src_8hpp_source.html
+++ b/doc/api/src_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/static__vector_8hpp_source.html b/doc/api/static__vector_8hpp_source.html
index d449edbcd..10ccbbbfc 100644
--- a/doc/api/static__vector_8hpp_source.html
+++ b/doc/api/static__vector_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/store_8hpp_source.html b/doc/api/store_8hpp_source.html
index 66d0b66ce..77b430193 100644
--- a/doc/api/store_8hpp_source.html
+++ b/doc/api/store_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/store__packet__variant_8hpp_source.html b/doc/api/store__packet__variant_8hpp_source.html
index 7f278db4f..be0ca2ffb 100644
--- a/doc/api/store__packet__variant_8hpp_source.html
+++ b/doc/api/store__packet__variant_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/store__packet__variant__fwd_8hpp_source.html b/doc/api/store__packet__variant__fwd_8hpp_source.html
index 7371f817e..fe278ff08 100644
--- a/doc/api/store__packet__variant__fwd_8hpp_source.html
+++ b/doc/api/store__packet__variant__fwd_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/stream_8hpp_source.html b/doc/api/stream_8hpp_source.html
index f9f426715..34efb4d70 100644
--- a/doc/api/stream_8hpp_source.html
+++ b/doc/api/stream_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/stream__traits_8hpp_source.html b/doc/api/stream__traits_8hpp_source.html
index 1abc655c3..5b7d2381e 100644
--- a/doc/api/stream__traits_8hpp_source.html
+++ b/doc/api/stream__traits_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/string__view__helper_8hpp_source.html b/doc/api/string__view__helper_8hpp_source.html
index 27e28a144..5a7b2381c 100644
--- a/doc/api/string__view__helper_8hpp_source.html
+++ b/doc/api/string__view__helper_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1basic__endpoint_1_1rebind__executor-members.html b/doc/api/structasync__mqtt_1_1basic__endpoint_1_1rebind__executor-members.html
index 7bc7d8a16..25ec9d258 100644
--- a/doc/api/structasync__mqtt_1_1basic__endpoint_1_1rebind__executor-members.html
+++ b/doc/api/structasync__mqtt_1_1basic__endpoint_1_1rebind__executor-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1basic__endpoint_1_1rebind__executor.html b/doc/api/structasync__mqtt_1_1basic__endpoint_1_1rebind__executor.html
index e02aee4ce..78e26626f 100644
--- a/doc/api/structasync__mqtt_1_1basic__endpoint_1_1rebind__executor.html
+++ b/doc/api/structasync__mqtt_1_1basic__endpoint_1_1rebind__executor.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1basic__packet__id__type.html b/doc/api/structasync__mqtt_1_1basic__packet__id__type.html
index c292e33fc..370815928 100644
--- a/doc/api/structasync__mqtt_1_1basic__packet__id__type.html
+++ b/doc/api/structasync__mqtt_1_1basic__packet__id__type.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1client_1_1pubres__type-members.html b/doc/api/structasync__mqtt_1_1client_1_1pubres__type-members.html
index 899282e11..367de5391 100644
--- a/doc/api/structasync__mqtt_1_1client_1_1pubres__type-members.html
+++ b/doc/api/structasync__mqtt_1_1client_1_1pubres__type-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1client_1_1pubres__type.html b/doc/api/structasync__mqtt_1_1client_1_1pubres__type.html
index 0f76ff3ff..7f1937caa 100644
--- a/doc/api/structasync__mqtt_1_1client_1_1pubres__type.html
+++ b/doc/api/structasync__mqtt_1_1client_1_1pubres__type.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1client_1_1rebind__executor-members.html b/doc/api/structasync__mqtt_1_1client_1_1rebind__executor-members.html
index f690c5461..b6cf7a628 100644
--- a/doc/api/structasync__mqtt_1_1client_1_1rebind__executor-members.html
+++ b/doc/api/structasync__mqtt_1_1client_1_1rebind__executor-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1client_1_1rebind__executor.html b/doc/api/structasync__mqtt_1_1client_1_1rebind__executor.html
index 85ddb4df8..47cf63b0a 100644
--- a/doc/api/structasync__mqtt_1_1client_1_1rebind__executor.html
+++ b/doc/api/structasync__mqtt_1_1client_1_1rebind__executor.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1layer__customize.html b/doc/api/structasync__mqtt_1_1layer__customize.html
index d4dbe8096..4fd882f6c 100644
--- a/doc/api/structasync__mqtt_1_1layer__customize.html
+++ b/doc/api/structasync__mqtt_1_1layer__customize.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1basic__stream__socket_3_01Protocol_00_01Executor_01_4_01_4-members.html b/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1basic__stream__socket_3_01Protocol_00_01Executor_01_4_01_4-members.html
index f6b9551be..dbd5e0df2 100644
--- a/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1basic__stream__socket_3_01Protocol_00_01Executor_01_4_01_4-members.html
+++ b/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1basic__stream__socket_3_01Protocol_00_01Executor_01_4_01_4-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1basic__stream__socket_3_01Protocol_00_01Executor_01_4_01_4.html b/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1basic__stream__socket_3_01Protocol_00_01Executor_01_4_01_4.html
index 2b99fd0e8..1a50b89e2 100644
--- a/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1basic__stream__socket_3_01Protocol_00_01Executor_01_4_01_4.html
+++ b/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1basic__stream__socket_3_01Protocol_00_01Executor_01_4_01_4.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1ssl_1_1stream_3_01NextLayer_01_4_01_4-members.html b/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1ssl_1_1stream_3_01NextLayer_01_4_01_4-members.html
index 05cb59538..c6a861767 100644
--- a/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1ssl_1_1stream_3_01NextLayer_01_4_01_4-members.html
+++ b/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1ssl_1_1stream_3_01NextLayer_01_4_01_4-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1ssl_1_1stream_3_01NextLayer_01_4_01_4.html b/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1ssl_1_1stream_3_01NextLayer_01_4_01_4.html
index d27419bc5..515583617 100644
--- a/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1ssl_1_1stream_3_01NextLayer_01_4_01_4.html
+++ b/doc/api/structasync__mqtt_1_1layer__customize_3_01as_1_1ssl_1_1stream_3_01NextLayer_01_4_01_4.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1layer__customize_3_01bs_1_1websocket_1_1stream_3_01NextLayer_01_4_01_4-members.html b/doc/api/structasync__mqtt_1_1layer__customize_3_01bs_1_1websocket_1_1stream_3_01NextLayer_01_4_01_4-members.html
index b2fad8e16..090b89414 100644
--- a/doc/api/structasync__mqtt_1_1layer__customize_3_01bs_1_1websocket_1_1stream_3_01NextLayer_01_4_01_4-members.html
+++ b/doc/api/structasync__mqtt_1_1layer__customize_3_01bs_1_1websocket_1_1stream_3_01NextLayer_01_4_01_4-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1layer__customize_3_01bs_1_1websocket_1_1stream_3_01NextLayer_01_4_01_4.html b/doc/api/structasync__mqtt_1_1layer__customize_3_01bs_1_1websocket_1_1stream_3_01NextLayer_01_4_01_4.html
index def8f2fc7..f6014e6de 100644
--- a/doc/api/structasync__mqtt_1_1layer__customize_3_01bs_1_1websocket_1_1stream_3_01NextLayer_01_4_01_4.html
+++ b/doc/api/structasync__mqtt_1_1layer__customize_3_01bs_1_1websocket_1_1stream_3_01NextLayer_01_4_01_4.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1pub_1_1opts-members.html b/doc/api/structasync__mqtt_1_1pub_1_1opts-members.html
index dbbbb69e0..3d764a765 100644
--- a/doc/api/structasync__mqtt_1_1pub_1_1opts-members.html
+++ b/doc/api/structasync__mqtt_1_1pub_1_1opts-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1pub_1_1opts.html b/doc/api/structasync__mqtt_1_1pub_1_1opts.html
index 4f61649dc..95b4ddb8d 100644
--- a/doc/api/structasync__mqtt_1_1pub_1_1opts.html
+++ b/doc/api/structasync__mqtt_1_1pub_1_1opts.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1sub_1_1opts-members.html b/doc/api/structasync__mqtt_1_1sub_1_1opts-members.html
index 07e17dbf3..f4201f8ae 100644
--- a/doc/api/structasync__mqtt_1_1sub_1_1opts-members.html
+++ b/doc/api/structasync__mqtt_1_1sub_1_1opts-members.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/structasync__mqtt_1_1sub_1_1opts.html b/doc/api/structasync__mqtt_1_1sub_1_1opts.html
index 0f2df5385..04e6c9639 100644
--- a/doc/api/structasync__mqtt_1_1sub_1_1opts.html
+++ b/doc/api/structasync__mqtt_1_1sub_1_1opts.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/subopts_8hpp_source.html b/doc/api/subopts_8hpp_source.html
index 10b880bd9..69ee8fd19 100644
--- a/doc/api/subopts_8hpp_source.html
+++ b/doc/api/subopts_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/topic__alias__recv_8hpp_source.html b/doc/api/topic__alias__recv_8hpp_source.html
index 21d1939f1..c217ead0b 100644
--- a/doc/api/topic__alias__recv_8hpp_source.html
+++ b/doc/api/topic__alias__recv_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/topic__alias__send_8hpp_source.html b/doc/api/topic__alias__send_8hpp_source.html
index c179a6a35..6ce0feba8 100644
--- a/doc/api/topic__alias__send_8hpp_source.html
+++ b/doc/api/topic__alias__send_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/topic__sharename_8hpp_source.html b/doc/api/topic__sharename_8hpp_source.html
index fd8c444b8..c276b2bdf 100644
--- a/doc/api/topic__sharename_8hpp_source.html
+++ b/doc/api/topic__sharename_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/topic__subopts_8hpp_source.html b/doc/api/topic__subopts_8hpp_source.html
index 3ca6862a3..a9a07d691 100644
--- a/doc/api/topic__subopts_8hpp_source.html
+++ b/doc/api/topic__subopts_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/topics.html b/doc/api/topics.html
index a57611716..93d9bb362 100644
--- a/doc/api/topics.html
+++ b/doc/api/topics.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/utf8validate_8hpp_source.html b/doc/api/utf8validate_8hpp_source.html
index 8114229a4..aebec3ce1 100644
--- a/doc/api/utf8validate_8hpp_source.html
+++ b/doc/api/utf8validate_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__connack_8hpp_source.html b/doc/api/v3__1__1__connack_8hpp_source.html
index 4799c40f8..42443e4d0 100644
--- a/doc/api/v3__1__1__connack_8hpp_source.html
+++ b/doc/api/v3__1__1__connack_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__connect_8hpp_source.html b/doc/api/v3__1__1__connect_8hpp_source.html
index ede275b09..0975df7bf 100644
--- a/doc/api/v3__1__1__connect_8hpp_source.html
+++ b/doc/api/v3__1__1__connect_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__disconnect_8hpp_source.html b/doc/api/v3__1__1__disconnect_8hpp_source.html
index 354619025..944e5ff13 100644
--- a/doc/api/v3__1__1__disconnect_8hpp_source.html
+++ b/doc/api/v3__1__1__disconnect_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__pingreq_8hpp_source.html b/doc/api/v3__1__1__pingreq_8hpp_source.html
index 49ddd73b9..8b90c3fc4 100644
--- a/doc/api/v3__1__1__pingreq_8hpp_source.html
+++ b/doc/api/v3__1__1__pingreq_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__pingresp_8hpp_source.html b/doc/api/v3__1__1__pingresp_8hpp_source.html
index 23ba84da9..f2c139d82 100644
--- a/doc/api/v3__1__1__pingresp_8hpp_source.html
+++ b/doc/api/v3__1__1__pingresp_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__puback_8hpp_source.html b/doc/api/v3__1__1__puback_8hpp_source.html
index 6eef2523e..16e262cce 100644
--- a/doc/api/v3__1__1__puback_8hpp_source.html
+++ b/doc/api/v3__1__1__puback_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__pubcomp_8hpp_source.html b/doc/api/v3__1__1__pubcomp_8hpp_source.html
index ae942d44e..39a47b82b 100644
--- a/doc/api/v3__1__1__pubcomp_8hpp_source.html
+++ b/doc/api/v3__1__1__pubcomp_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__publish_8hpp_source.html b/doc/api/v3__1__1__publish_8hpp_source.html
index bedf1c526..04d35660c 100644
--- a/doc/api/v3__1__1__publish_8hpp_source.html
+++ b/doc/api/v3__1__1__publish_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__pubrec_8hpp_source.html b/doc/api/v3__1__1__pubrec_8hpp_source.html
index 93a5df3e1..9751e3afc 100644
--- a/doc/api/v3__1__1__pubrec_8hpp_source.html
+++ b/doc/api/v3__1__1__pubrec_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__pubrel_8hpp_source.html b/doc/api/v3__1__1__pubrel_8hpp_source.html
index 77c67eb76..19516a278 100644
--- a/doc/api/v3__1__1__pubrel_8hpp_source.html
+++ b/doc/api/v3__1__1__pubrel_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__suback_8hpp_source.html b/doc/api/v3__1__1__suback_8hpp_source.html
index 77fccbe8a..446c3e97e 100644
--- a/doc/api/v3__1__1__suback_8hpp_source.html
+++ b/doc/api/v3__1__1__suback_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__subscribe_8hpp_source.html b/doc/api/v3__1__1__subscribe_8hpp_source.html
index 0c3abb35e..b428a6f16 100644
--- a/doc/api/v3__1__1__subscribe_8hpp_source.html
+++ b/doc/api/v3__1__1__subscribe_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__unsuback_8hpp_source.html b/doc/api/v3__1__1__unsuback_8hpp_source.html
index 64a90ae9e..bfe1846f8 100644
--- a/doc/api/v3__1__1__unsuback_8hpp_source.html
+++ b/doc/api/v3__1__1__unsuback_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v3__1__1__unsubscribe_8hpp_source.html b/doc/api/v3__1__1__unsubscribe_8hpp_source.html
index 69f1a8cee..8fad1c6a7 100644
--- a/doc/api/v3__1__1__unsubscribe_8hpp_source.html
+++ b/doc/api/v3__1__1__unsubscribe_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__auth_8hpp_source.html b/doc/api/v5__auth_8hpp_source.html
index d850a70cf..eb614fee0 100644
--- a/doc/api/v5__auth_8hpp_source.html
+++ b/doc/api/v5__auth_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__connack_8hpp_source.html b/doc/api/v5__connack_8hpp_source.html
index 5249810d1..74edec3a2 100644
--- a/doc/api/v5__connack_8hpp_source.html
+++ b/doc/api/v5__connack_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__connect_8hpp_source.html b/doc/api/v5__connect_8hpp_source.html
index 8c3fae6d0..2c22fb93e 100644
--- a/doc/api/v5__connect_8hpp_source.html
+++ b/doc/api/v5__connect_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__disconnect_8hpp_source.html b/doc/api/v5__disconnect_8hpp_source.html
index 35839fe62..6f0a8cd7e 100644
--- a/doc/api/v5__disconnect_8hpp_source.html
+++ b/doc/api/v5__disconnect_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__pingreq_8hpp_source.html b/doc/api/v5__pingreq_8hpp_source.html
index 77247acd6..6d8758f40 100644
--- a/doc/api/v5__pingreq_8hpp_source.html
+++ b/doc/api/v5__pingreq_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__pingresp_8hpp_source.html b/doc/api/v5__pingresp_8hpp_source.html
index d979fbe89..adad4fdee 100644
--- a/doc/api/v5__pingresp_8hpp_source.html
+++ b/doc/api/v5__pingresp_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__puback_8hpp_source.html b/doc/api/v5__puback_8hpp_source.html
index 8740ec6fa..a9ce4a33a 100644
--- a/doc/api/v5__puback_8hpp_source.html
+++ b/doc/api/v5__puback_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__pubcomp_8hpp_source.html b/doc/api/v5__pubcomp_8hpp_source.html
index 31887d9cf..0a89cb132 100644
--- a/doc/api/v5__pubcomp_8hpp_source.html
+++ b/doc/api/v5__pubcomp_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__publish_8hpp_source.html b/doc/api/v5__publish_8hpp_source.html
index 9cb8a7b2a..7469ab3f1 100644
--- a/doc/api/v5__publish_8hpp_source.html
+++ b/doc/api/v5__publish_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__pubrec_8hpp_source.html b/doc/api/v5__pubrec_8hpp_source.html
index 9cd82d53e..5e7a9bba1 100644
--- a/doc/api/v5__pubrec_8hpp_source.html
+++ b/doc/api/v5__pubrec_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__pubrel_8hpp_source.html b/doc/api/v5__pubrel_8hpp_source.html
index 07f646bc4..bb6febbd9 100644
--- a/doc/api/v5__pubrel_8hpp_source.html
+++ b/doc/api/v5__pubrel_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__suback_8hpp_source.html b/doc/api/v5__suback_8hpp_source.html
index acbd9cee8..e79dd6e61 100644
--- a/doc/api/v5__suback_8hpp_source.html
+++ b/doc/api/v5__suback_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__subscribe_8hpp_source.html b/doc/api/v5__subscribe_8hpp_source.html
index 66e24ccac..11765dd4c 100644
--- a/doc/api/v5__subscribe_8hpp_source.html
+++ b/doc/api/v5__subscribe_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__unsuback_8hpp_source.html b/doc/api/v5__unsuback_8hpp_source.html
index fd8f06f97..6108e66a7 100644
--- a/doc/api/v5__unsuback_8hpp_source.html
+++ b/doc/api/v5__unsuback_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/v5__unsubscribe_8hpp_source.html b/doc/api/v5__unsubscribe_8hpp_source.html
index 165592957..9a44d5d08 100644
--- a/doc/api/v5__unsubscribe_8hpp_source.html
+++ b/doc/api/v5__unsubscribe_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/value__allocator_8hpp_source.html b/doc/api/value__allocator_8hpp_source.html
index 9077c7696..f9a5fb80e 100644
--- a/doc/api/value__allocator_8hpp_source.html
+++ b/doc/api/value__allocator_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/variable__bytes_8hpp_source.html b/doc/api/variable__bytes_8hpp_source.html
index e00d42b7d..4d4d48caf 100644
--- a/doc/api/variable__bytes_8hpp_source.html
+++ b/doc/api/variable__bytes_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/will_8hpp_source.html b/doc/api/will_8hpp_source.html
index 1c830be62..a37b3e964 100644
--- a/doc/api/will_8hpp_source.html
+++ b/doc/api/will_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/ws_8hpp_source.html b/doc/api/ws_8hpp_source.html
index 50b08ca0c..0470df1f1 100644
--- a/doc/api/ws_8hpp_source.html
+++ b/doc/api/ws_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/api/wss_8hpp_source.html b/doc/api/wss_8hpp_source.html
index 65f1db9d1..cf0f3dc8f 100644
--- a/doc/api/wss_8hpp_source.html
+++ b/doc/api/wss_8hpp_source.html
@@ -28,7 +28,7 @@
  <tbody>
  <tr id="projectrow">
   <td id="projectalign">
-   <div id="projectname">async_mqtt<span id="projectnumber">&#160;7.0.1</span>
+   <div id="projectname">async_mqtt<span id="projectnumber">&#160;8.0.0</span>
    </div>
   </td>
  </tr>
diff --git a/doc/comparison.html b/doc/comparison.html
index 095ec60e1..2a288db18 100644
--- a/doc/comparison.html
+++ b/doc/comparison.html
@@ -656,7 +656,7 @@ <h5 id="_async_mqtt_separate_compilation_mode">async_mqtt (separate-compilation-
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2024-06-24 23:04:15 +0900
+Last updated 2024-06-25 01:01:25 +0900
 </div>
 </div>
 </body>
diff --git a/doc/tutorial/client.html b/doc/tutorial/client.html
index d253530e0..9f652adba 100644
--- a/doc/tutorial/client.html
+++ b/doc/tutorial/client.html
@@ -222,12 +222,12 @@ <h2 id="_mqtt">mqtt</h2>
 <div class="content">
 <pre class="rouge highlight"><code data-lang="cpp">    <span class="k">using</span> <span class="n">client_t</span> <span class="o">=</span> <span class="n">am</span><span class="o">::</span><span class="n">client</span><span class="o">&lt;</span><span class="n">am</span><span class="o">::</span><span class="n">protocol_version</span><span class="o">::</span><span class="n">v3_1_1</span><span class="p">,</span> <span class="n">am</span><span class="o">::</span><span class="n">protocol</span><span class="o">::</span><span class="n">mqtt</span><span class="p">;</span>
     <span class="n">as</span><span class="o">::</span><span class="n">io_context</span> <span class="n">ioc</span><span class="p">;</span>
-    <span class="n">client_t</span> <span class="n">amcl</span><span class="p">{</span>
+    <span class="k">auto</span> <span class="n">amcl</span> <span class="o">=</span> <span class="n">client_t</span><span class="o">::</span><span class="n">create</span><span class="p">(</span>
         <span class="n">ioc</span><span class="p">.</span><span class="n">get_executor</span><span class="p">()</span> <span class="c1">// args for underlying layer (mqtt)</span>
         <span class="c1">// mqtt is as::basic_stream_socket&lt;as::ip::tcp, as::io_context::executor_type&gt;</span>
     <span class="p">);</span>
     <span class="c1">// handshake underlying layers</span>
-    <span class="k">co_await</span> <span class="n">am</span><span class="o">::</span><span class="n">async_underlying_handshake</span><span class="p">(</span><span class="n">amcl</span><span class="p">.</span><span class="n">next_layer</span><span class="p">(),</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
+    <span class="k">co_await</span> <span class="n">am</span><span class="o">::</span><span class="n">async_underlying_handshake</span><span class="p">(</span><span class="n">amcl</span><span class="o">-&gt;</span><span class="n">next_layer</span><span class="p">(),</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
 </div>
 </div>
 </div>
@@ -257,7 +257,7 @@ <h2 id="_mqtts">mqtts</h2>
         <span class="n">ctx</span>
     <span class="p">);</span>
     <span class="c1">// handshake underlying layers</span>
-    <span class="k">co_await</span> <span class="n">am</span><span class="o">::</span><span class="n">async_underlying_handshake</span><span class="p">(</span><span class="n">amcl</span><span class="p">.</span><span class="n">next_layer</span><span class="p">(),</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
+    <span class="k">co_await</span> <span class="n">am</span><span class="o">::</span><span class="n">async_underlying_handshake</span><span class="p">(</span><span class="n">amcl</span><span class="o">-&gt;</span><span class="n">next_layer</span><span class="p">(),</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
 </div>
 </div>
 </div>
@@ -273,7 +273,7 @@ <h2 id="_ws">ws</h2>
         <span class="n">ioc</span><span class="p">.</span><span class="n">get_executor</span><span class="p">()</span>  <span class="c1">// args for underlying layer (bs::websocket::stream&lt;mqtt&gt;)</span>
     <span class="p">);</span>
     <span class="c1">// handshake underlying layers</span>
-    <span class="k">co_await</span> <span class="n">am</span><span class="o">::</span><span class="n">async_underlying_handshake</span><span class="p">(</span><span class="n">amcl</span><span class="p">.</span><span class="n">next_layer</span><span class="p">(),</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
+    <span class="k">co_await</span> <span class="n">am</span><span class="o">::</span><span class="n">async_underlying_handshake</span><span class="p">(</span><span class="n">amcl</span><span class="o">-&gt;</span><span class="n">next_layer</span><span class="p">(),</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
 </div>
 </div>
 </div>
@@ -302,7 +302,7 @@ <h2 id="_wss">wss</h2>
         <span class="n">ctx</span>                  <span class="c1">// mqtts is as::ssl::stream&lt;mqtt&gt;</span>
     <span class="p">);</span>
     <span class="c1">// handshake underlying layers</span>
-    <span class="k">co_await</span> <span class="n">am</span><span class="o">::</span><span class="n">async_underlying_handshake</span><span class="p">(</span><span class="n">amcl</span><span class="p">.</span><span class="n">next_layer</span><span class="p">(),</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
+    <span class="k">co_await</span> <span class="n">am</span><span class="o">::</span><span class="n">async_underlying_handshake</span><span class="p">(</span><span class="n">amcl</span><span class="o">-&gt;</span><span class="n">next_layer</span><span class="p">(),</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
 </div>
 </div>
 </div>
@@ -385,7 +385,7 @@ <h3 id="_async_start_funtion"><a href="../api/classasync__mqtt_1_1client.html#a6
 <span class="p">};</span>
 
 <span class="c1">// MQTT connect and receive loop start</span>
-<span class="k">auto</span> <span class="n">connack_opt</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_start</span><span class="p">(</span>
+<span class="k">auto</span> <span class="n">connack_opt</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_start</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">v5</span><span class="o">::</span><span class="n">connect_packet</span><span class="p">{</span>
         <span class="nb">true</span><span class="p">,</span>   <span class="c1">// clean_start</span>
         <span class="mh">0x1234</span><span class="p">,</span> <span class="c1">// keep_alive</span>
@@ -410,7 +410,7 @@ <h3 id="_async_start_funtion"><a href="../api/classasync__mqtt_1_1client.html#a6
 <div class="listingblock">
 <div class="content">
 <pre class="rouge highlight"><code data-lang="cpp"><span class="c1">// MQTT connect and receive loop start</span>
-<span class="k">auto</span> <span class="p">[</span><span class="n">ec</span><span class="p">,</span> <span class="n">connack_opt</span><span class="p">]</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_start</span><span class="p">(</span>
+<span class="k">auto</span> <span class="p">[</span><span class="n">ec</span><span class="p">,</span> <span class="n">connack_opt</span><span class="p">]</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_start</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">v5</span><span class="o">::</span><span class="n">connect_packet</span><span class="p">{</span>
         <span class="nb">true</span><span class="p">,</span>   <span class="c1">// clean_start</span>
         <span class="mh">0x1234</span><span class="p">,</span> <span class="c1">// keep_alive</span>
@@ -432,7 +432,7 @@ <h3 id="_async_start_funtion"><a href="../api/classasync__mqtt_1_1client.html#a6
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="rouge highlight"><code data-lang="cpp"><span class="k">auto</span> <span class="n">connack_opt</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_start</span><span class="p">(</span>
+<pre class="rouge highlight"><code data-lang="cpp"><span class="k">auto</span> <span class="n">connack_opt</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_start</span><span class="p">(</span>
     <span class="nb">true</span><span class="p">,</span>   <span class="c1">// clean_start</span>
     <span class="n">std</span><span class="o">::</span><span class="kt">uint16_t</span><span class="p">(</span><span class="mh">0x1234</span><span class="p">),</span> <span class="c1">// keep_alive</span>
     <span class="s">"ClientIdentifier1"</span><span class="p">,</span>
@@ -463,9 +463,9 @@ <h3 id="_async_subscribe_funtion"><a href="../api/classasync__mqtt_1_1client.htm
     <span class="p">{</span><span class="s">"topic2"</span><span class="p">,</span> <span class="n">am</span><span class="o">::</span><span class="n">qos</span><span class="o">::</span><span class="n">at_least_once</span><span class="p">},</span>
     <span class="p">{</span><span class="s">"topic3"</span><span class="p">,</span> <span class="n">am</span><span class="o">::</span><span class="n">qos</span><span class="o">::</span><span class="n">exactly_once</span><span class="p">},</span>
 <span class="p">};</span>
-<span class="k">auto</span> <span class="n">suback_opt</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_subscribe</span><span class="p">(</span>
+<span class="k">auto</span> <span class="n">suback_opt</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_subscribe</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">v5</span><span class="o">::</span><span class="n">subscribe_packet</span><span class="p">{</span>
-        <span class="o">*</span><span class="n">amcl</span><span class="p">.</span><span class="n">acquire_unique_packet_id</span><span class="p">(),</span> <span class="c1">// sync version only in thread safe environment</span>
+        <span class="o">*</span><span class="n">amcl</span><span class="o">-&gt;</span><span class="n">acquire_unique_packet_id</span><span class="p">(),</span> <span class="c1">// sync version only in thread safe environment</span>
         <span class="n">am</span><span class="o">::</span><span class="n">force_move</span><span class="p">(</span><span class="n">sub_entry</span><span class="p">)</span> <span class="c1">// sub_entry variable is required to avoid g++ bug</span>
     <span class="p">},</span>
     <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span>
@@ -490,9 +490,9 @@ <h3 id="_async_unsubscribe_funtion"><a href="../api/classasync__mqtt_1_1client.h
     <span class="s">"topic3"</span><span class="p">,</span>
 <span class="p">};</span>
 
-<span class="k">auto</span> <span class="n">unsuback_opt</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_unsubscribe</span><span class="p">(</span>
+<span class="k">auto</span> <span class="n">unsuback_opt</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_unsubscribe</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">v5</span><span class="o">::</span><span class="n">unsubscribe_packet</span><span class="p">{</span>
-        <span class="o">*</span><span class="n">amcl</span><span class="p">.</span><span class="n">acquire_unique_packet_id</span><span class="p">(),</span> <span class="c1">// sync version only in thread safe environment</span>
+        <span class="o">*</span><span class="n">amcl</span><span class="o">-&gt;</span><span class="n">acquire_unique_packet_id</span><span class="p">(),</span> <span class="c1">// sync version only in thread safe environment</span>
         <span class="n">am</span><span class="o">::</span><span class="n">force_move</span><span class="p">(</span><span class="n">unsub_entry</span><span class="p">)</span> <span class="c1">// unsub_entry variable is required to avoid g++ bug</span>
     <span class="p">},</span>
     <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span>
@@ -519,7 +519,7 @@ <h3 id="_async_publish_funtion"><a href="../api/classasync__mqtt_1_1client.html#
 <div class="listingblock">
 <div class="content">
 <pre class="rouge highlight"><code data-lang="cpp"><span class="c1">// MQTT publish QoS0 and wait response (socket write complete)</span>
-<span class="k">auto</span> <span class="n">pubres0</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_publish</span><span class="p">(</span>
+<span class="k">auto</span> <span class="n">pubres0</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_publish</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">v5</span><span class="o">::</span><span class="n">publish_packet</span><span class="p">{</span>
         <span class="s">"topic1"</span><span class="p">,</span>
         <span class="s">"payload1"</span><span class="p">,</span>
@@ -538,8 +538,8 @@ <h3 id="_async_publish_funtion"><a href="../api/classasync__mqtt_1_1client.html#
 <div class="listingblock">
 <div class="content">
 <pre class="rouge highlight"><code data-lang="cpp"><span class="c1">// MQTT publish QoS1 and wait response (puback receive)</span>
-<span class="k">auto</span> <span class="n">pid_pub1</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_acquire_unique_packet_id</span><span class="p">(</span><span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span> <span class="c1">// async version</span>
-<span class="k">auto</span> <span class="n">pubres1</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_publish</span><span class="p">(</span>
+<span class="k">auto</span> <span class="n">pid_pub1</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_acquire_unique_packet_id</span><span class="p">(</span><span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span> <span class="c1">// async version</span>
+<span class="k">auto</span> <span class="n">pubres1</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_publish</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">v5</span><span class="o">::</span><span class="n">publish_packet</span><span class="p">{</span>
         <span class="o">*</span><span class="n">pid_pub1_opt</span><span class="p">,</span>
         <span class="s">"topic2"</span><span class="p">,</span>
@@ -562,8 +562,8 @@ <h3 id="_async_publish_funtion"><a href="../api/classasync__mqtt_1_1client.html#
 <div class="listingblock">
 <div class="content">
 <pre class="rouge highlight"><code data-lang="cpp"><span class="c1">// MQTT publish QoS2 and wait response (pubrec, pubcomp receive)</span>
-<span class="k">auto</span> <span class="n">pid_pub2</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">acquire_unique_packet_id_wait_until</span><span class="p">(</span><span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span> <span class="c1">// async version</span>
-<span class="k">auto</span> <span class="n">pubres2</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_publish</span><span class="p">(</span>
+<span class="k">auto</span> <span class="n">pid_pub2</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">acquire_unique_packet_id_wait_until</span><span class="p">(</span><span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span> <span class="c1">// async version</span>
+<span class="k">auto</span> <span class="n">pubres2</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_publish</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">v5</span><span class="o">::</span><span class="n">publish_packet</span><span class="p">{</span>
         <span class="n">pid_pub2</span><span class="p">,</span>
         <span class="s">"topic3"</span><span class="p">,</span>
@@ -590,7 +590,7 @@ <h2 id="_receive_publish_packet_from_the_broker">Receive PUBLISH packet from the
 <h3 id="_async_recv_funtion"><a href="../api/classasync__mqtt_1_1client.html#a825c14790ca009436f20c1b2c7952204">async_recv()</a> funtion</h3>
 <div class="listingblock">
 <div class="content">
-<pre class="rouge highlight"><code data-lang="cpp"><span class="k">auto</span> <span class="n">pv</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_recv</span><span class="p">(</span><span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span>
+<pre class="rouge highlight"><code data-lang="cpp"><span class="k">auto</span> <span class="n">pv</span> <span class="o">=</span> <span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_recv</span><span class="p">(</span><span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span>
 <span class="n">pv</span><span class="p">.</span><span class="n">visit</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">overload</span><span class="p">{</span>
         <span class="p">[</span><span class="o">&amp;</span><span class="p">](</span><span class="n">awaitable_client</span><span class="o">::</span><span class="n">publish_packet</span><span class="o">&amp;</span> <span class="n">p</span><span class="p">)</span> <span class="p">{</span>
@@ -623,7 +623,7 @@ <h2 id="_send_disconnect_packet">Send DISCONNECT packet</h2>
 <h3 id="_async_disconnect_funtion"><a href="../api/classasync__mqtt_1_1client.html#acd225df7e04770be801742bbbb437d9e">async_disconnect()</a> funtion</h3>
 <div class="listingblock">
 <div class="content">
-<pre class="rouge highlight"><code data-lang="cpp"><span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_disconnect</span><span class="p">(</span>
+<pre class="rouge highlight"><code data-lang="cpp"><span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_disconnect</span><span class="p">(</span>
     <span class="n">am</span><span class="o">::</span><span class="n">v5</span><span class="o">::</span><span class="n">disconnect_packet</span><span class="p">{},</span>
     <span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span>
 <span class="p">);</span></code></pre>
@@ -645,7 +645,7 @@ <h2 id="_close">Close</h2>
 <h3 id="_async_close_funtion"><a href="../api/classasync__mqtt_1_1client.html#a9dda4bdcebd220beb5392adb5da86110">async_close()</a> funtion</h3>
 <div class="listingblock">
 <div class="content">
-<pre class="rouge highlight"><code data-lang="cpp"><span class="k">co_await</span> <span class="n">amcl</span><span class="p">.</span><span class="n">async_close</span><span class="p">(</span><span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
+<pre class="rouge highlight"><code data-lang="cpp"><span class="k">co_await</span> <span class="n">amcl</span><span class="o">-&gt;</span><span class="n">async_close</span><span class="p">(</span><span class="n">as</span><span class="o">::</span><span class="n">use_awaitable</span><span class="p">);</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
diff --git a/example/cl_cpp17_mqtt_pub.cpp b/example/cl_cpp17_mqtt_pub.cpp
index a9fb893ac..42b3efa30 100644
--- a/example/cl_cpp17_mqtt_pub.cpp
+++ b/example/cl_cpp17_mqtt_pub.cpp
@@ -25,10 +25,10 @@ using client_t = am::client<am::protocol_version::v5, am::protocol::mqtt>;
 
 struct app {
     app(as::any_io_executor exe, std::string_view host, std::string_view port)
-        : cli_{exe}
+        : cli_{client_t::create(exe)}
     {
         am::async_underlying_handshake(
-            cli_.next_layer(),
+            cli_->next_layer(),
             host,
             port,
             [this](auto&&... args) {
@@ -45,7 +45,7 @@ struct app {
     ) {
         std::cout << "underlying_handshake:" << ec.message() << std::endl;
         if (ec) return;
-        cli_.async_start(
+        cli_->async_start(
             true,                // clean_start
             std::uint16_t(0),    // keep_alive
             "",                  // Client Identifier, empty means generated by the broker
@@ -66,7 +66,7 @@ struct app {
         if (ec) return;
         if (connack_opt) {
             std::cout << *connack_opt << std::endl;
-            cli_.async_publish(
+            cli_->async_publish(
                 "topic1",
                 "payload1",
                 am::qos::at_most_once,
@@ -76,8 +76,8 @@ struct app {
                     );
                 }
             );
-            cli_.async_publish(
-                *cli_.acquire_unique_packet_id(), // sync version only works thread safe context
+            cli_->async_publish(
+                *cli_->acquire_unique_packet_id(), // sync version only works thread safe context
                 "topic2",
                 "payload2",
                 am::qos::at_least_once,
@@ -87,8 +87,8 @@ struct app {
                     );
                 }
             );
-            cli_.async_publish(
-                *cli_.acquire_unique_packet_id(), // sync version only works thread safe context
+            cli_->async_publish(
+                *cli_->acquire_unique_packet_id(), // sync version only works thread safe context
                 "topic3",
                 "payload3",
                 am::qos::exactly_once,
@@ -115,11 +115,11 @@ struct app {
         }
         if (pubres.pubcomp_opt) {
             std::cout << *pubres.pubcomp_opt << std::endl;
-            cli_.async_disconnect(as::detached);
+            cli_->async_disconnect(as::detached);
         }
     }
 
-    client_t cli_;
+    std::shared_ptr<client_t> cli_;
 };
 
 int main(int argc, char* argv[]) {
diff --git a/example/cl_cpp17_mqtt_sub.cpp b/example/cl_cpp17_mqtt_sub.cpp
index c547030d9..bde40423a 100644
--- a/example/cl_cpp17_mqtt_sub.cpp
+++ b/example/cl_cpp17_mqtt_sub.cpp
@@ -25,7 +25,7 @@ using client_t = am::client<am::protocol_version::v5, am::protocol::mqtt>;
 
 struct app {
     app(as::any_io_executor exe, std::string_view host, std::string_view port)
-        : cli_{exe}, host_{host}, port_{port}
+        : cli_{client_t::create(exe)}, host_{host}, port_{port}
     {
         connect();
     }
@@ -33,7 +33,7 @@ struct app {
 private:
     void connect() {
         am::async_underlying_handshake(
-            cli_.next_layer(),
+            cli_->next_layer(),
             host_,
             port_,
             [this](auto&&... args) {
@@ -63,7 +63,7 @@ struct app {
             reconnect();
             return;
         }
-        cli_.async_start(
+        cli_->async_start(
             true,                // clean_start
             std::uint16_t(0),    // keep_alive
             "",                  // Client Identifier, empty means generated by the broker
@@ -96,8 +96,8 @@ struct app {
             {"topic2", am::qos::at_least_once},
             {"topic3", am::qos::exactly_once},
         };
-        cli_.async_subscribe(
-            *cli_.acquire_unique_packet_id(), // sync version only works thread safe context
+        cli_->async_subscribe(
+            *cli_->acquire_unique_packet_id(), // sync version only works thread safe context
             am::force_move(sub_entry),
             [this](auto&&... args) {
                 handle_subscribe_response(
@@ -119,7 +119,7 @@ struct app {
         if (suback_opt) {
             std::cout << *suback_opt << std::endl;
         }
-        cli_.async_recv(
+        cli_->async_recv(
             [this](auto&&... args) {
                 handle_recv(
                     std::forward<std::remove_reference_t<decltype(args)>>(args)...
@@ -140,7 +140,7 @@ struct app {
         BOOST_ASSERT(pv);
         std::cout << pv << std::endl;
         // next receive
-        cli_.async_recv(
+        cli_->async_recv(
             [this](auto&&... args) {
                 handle_recv(
                     std::forward<std::remove_reference_t<decltype(args)>>(args)...
@@ -149,10 +149,10 @@ struct app {
         );
     }
 
-    client_t cli_;
+    std::shared_ptr<client_t> cli_;
     std::string host_;
     std::string port_;
-    as::steady_timer tim_{cli_.get_executor()};
+    as::steady_timer tim_{cli_->get_executor()};
 };
 
 int main(int argc, char* argv[]) {
diff --git a/example/cl_cpp20coro_mqtt.cpp b/example/cl_cpp20coro_mqtt.cpp
index 4733feca8..a26e714cd 100644
--- a/example/cl_cpp20coro_mqtt.cpp
+++ b/example/cl_cpp20coro_mqtt.cpp
@@ -205,7 +205,7 @@ int main(int argc, char* argv[]) {
         return -1;
     }
     as::io_context ioc;
-    client_t amcl{ioc.get_executor()};
-    as::co_spawn(amcl.get_executor(), proc(amcl, argv[1], argv[2]), as::detached);
+    auto amcl = client_t::create(ioc.get_executor());
+    as::co_spawn(amcl->get_executor(), proc(*amcl, argv[1], argv[2]), as::detached);
     ioc.run();
 }
diff --git a/example/cl_cpp20coro_mqtt_pub.cpp b/example/cl_cpp20coro_mqtt_pub.cpp
index dce17f41c..f61a8d7fa 100644
--- a/example/cl_cpp20coro_mqtt_pub.cpp
+++ b/example/cl_cpp20coro_mqtt_pub.cpp
@@ -113,7 +113,7 @@ int main(int argc, char* argv[]) {
         return -1;
     }
     as::io_context ioc;
-    awaitable_client amcl{ioc.get_executor()};
-    as::co_spawn(amcl.get_executor(), proc(amcl, argv[1], argv[2]), as::detached);
+    auto amcl = awaitable_client::create(ioc.get_executor());
+    as::co_spawn(amcl->get_executor(), proc(*amcl, argv[1], argv[2]), as::detached);
     ioc.run();
 }
diff --git a/example/cl_cpp20coro_mqtt_sub.cpp b/example/cl_cpp20coro_mqtt_sub.cpp
index 391c7fed1..e13d8070e 100644
--- a/example/cl_cpp20coro_mqtt_sub.cpp
+++ b/example/cl_cpp20coro_mqtt_sub.cpp
@@ -111,7 +111,7 @@ int main(int argc, char* argv[]) {
         return -1;
     }
     as::io_context ioc;
-    awaitable_client amcl{ioc.get_executor()};
-    as::co_spawn(amcl.get_executor(), proc(amcl, argv[1], argv[2]), as::detached);
+    auto amcl = awaitable_client::create(ioc.get_executor());
+    as::co_spawn(amcl->get_executor(), proc(*amcl, argv[1], argv[2]), as::detached);
     ioc.run();
 }
diff --git a/example/footprint.cpp b/example/footprint.cpp
index 54e1c0a8c..447527b48 100644
--- a/example/footprint.cpp
+++ b/example/footprint.cpp
@@ -13,15 +13,15 @@ int main() {
 
     am::setup_log(am::severity_level::warning);
     as::io_context ioc;
-    am::client<am::protocol_version::v5, am::protocol::mqtt> amcl{ioc.get_executor()};
+    auto amcl = am::client<am::protocol_version::v5, am::protocol::mqtt>::create(ioc.get_executor());
     as::co_spawn(
-        amcl.get_executor(),
+        amcl->get_executor(),
         [&] () -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
 
             // Resolve hostname
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883",
                 as::as_tuple(as::deferred)
@@ -29,7 +29,7 @@ int main() {
             if (ec_und) co_return;
 
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0x1234), // keep_alive
                 "cid1",
@@ -54,8 +54,8 @@ int main() {
                     am::sub::retain_handling::send
                 },
             };
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
-                *amcl.acquire_unique_packet_id(), // sync version only in strand
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
+                *amcl->acquire_unique_packet_id(), // sync version only in strand
                 am::force_move(sub_entry), // sub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
             );
@@ -64,7 +64,7 @@ int main() {
 
             // publish
             // MQTT publish QoS0 and wait response (socket write complete)
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 "topic1",
                 "payload1",
                 am::qos::at_most_once,
@@ -72,13 +72,13 @@ int main() {
             );
             if (ec_pub0) co_return;
 
-            auto [ec_recv, pv] = co_await amcl.async_recv(
+            auto [ec_recv, pv] = co_await amcl->async_recv(
                 as::as_tuple(as::deferred)
             );
 
             // unsubscribe
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
-                *amcl.acquire_unique_packet_id(), // sync version only in strand
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
+                *amcl->acquire_unique_packet_id(), // sync version only in strand
                 std::vector<am::topic_sharename>{"topic1"},
                 as::as_tuple(as::use_awaitable)
             );
@@ -86,7 +86,7 @@ int main() {
             if (!unsuback_opt) co_return;
 
             // disconnect
-            auto [ec_discon] = co_await amcl.async_disconnect(
+            auto [ec_discon] = co_await amcl->async_disconnect(
                 as::as_tuple(as::use_awaitable)
             );
             if (ec_discon) co_return;
diff --git a/example/separate_client/main.cpp b/example/separate_client/main.cpp
index 4733feca8..a26e714cd 100644
--- a/example/separate_client/main.cpp
+++ b/example/separate_client/main.cpp
@@ -205,7 +205,7 @@ int main(int argc, char* argv[]) {
         return -1;
     }
     as::io_context ioc;
-    client_t amcl{ioc.get_executor()};
-    as::co_spawn(amcl.get_executor(), proc(amcl, argv[1], argv[2]), as::detached);
+    auto amcl = client_t::create(ioc.get_executor());
+    as::co_spawn(amcl->get_executor(), proc(*amcl, argv[1], argv[2]), as::detached);
     ioc.run();
 }
diff --git a/include/async_mqtt/client.hpp b/include/async_mqtt/client.hpp
index 4266baba8..c9a22ec2b 100644
--- a/include/async_mqtt/client.hpp
+++ b/include/async_mqtt/client.hpp
@@ -18,6 +18,7 @@
 #include <async_mqtt/packet/packet_id_type.hpp>
 #include <async_mqtt/endpoint_fwd.hpp>
 #include <async_mqtt/detail/client_packet_type_getter.hpp>
+#include <async_mqtt/util/make_shared_helper.hpp>
 
 /**
  * @defgroup client client (High level MQTT client)
@@ -78,8 +79,12 @@ namespace as = boost::asio;
  * @tparam NextLayer     Just next layer for basic_endpoint. mqtt, mqtts, ws, and wss are predefined.
  */
 template <protocol_version Version, typename NextLayer>
-class client {
+class client : public std::enable_shared_from_this<client<Version, NextLayer>> {
     using this_type = client<Version, NextLayer>;
+    using this_type_sp = std::shared_ptr<this_type>;
+
+    template <typename T>
+    friend class make_shared_helper;
 
 public:
     /// @brief type of endpoint
@@ -128,7 +133,7 @@ class client {
     };
 
     /**
-     * @brief constructor
+     * @brief create
      * @tparam Args Types for the next layer
      * @param  args args for the next layer.
      * - There are predefined next layer types:
@@ -136,23 +141,14 @@ class client {
      *    - protocol::mqtts
      *    - protocol::ws
      *    - protocol::wss
+     * @return shared_ptr of client.
      */
     template <typename... Args>
-    explicit
-    client(
+    static std::shared_ptr<this_type> create(
         Args&&... args
-    );
-
-    /**
-     *  @brief Rebinding constructor
-     *         This constructor creates a client from the client with a different executor.
-     *  @param other The other client to construct from.
-     */
-    template <typename Other>
-    explicit
-    client(
-        client<Version, Other>&& other
-    );
+    ) {
+        return make_shared_helper<this_type>::make_shared(std::forward<Args>(args)...);
+    }
 
     /**
      * @brief copy constructor **deleted**
@@ -729,6 +725,33 @@ class client {
 
 private:
 
+    /**
+     * @brief constructor
+     * @tparam Args Types for the next layer
+     * @param  args args for the next layer.
+     * - There are predefined next layer types:
+     *    - protocol::mqtt
+     *    - protocol::mqtts
+     *    - protocol::ws
+     *    - protocol::wss
+     */
+    template <typename... Args>
+    explicit
+    client(
+        Args&&... args
+    );
+
+    /**
+     *  @brief Rebinding constructor
+     *         This constructor creates a client from the client with a different executor.
+     *  @param other The other client to construct from.
+     */
+    template <typename Other>
+    explicit
+    client(
+        client<Version, Other>&& other
+    );
+
     template <
         typename CompletionToken = as::default_completion_token_t<executor_type>
     >
diff --git a/include/async_mqtt/endpoint.hpp b/include/async_mqtt/endpoint.hpp
index 7e68ff1ad..33d768e4c 100644
--- a/include/async_mqtt/endpoint.hpp
+++ b/include/async_mqtt/endpoint.hpp
@@ -46,7 +46,7 @@ enum class filter {
 };
 
 template <role Role, std::size_t PacketIdBytes, typename NextLayer>
-class basic_endpoint : public std::enable_shared_from_this<basic_endpoint<Role, PacketIdBytes, NextLayer>>{
+class basic_endpoint : public std::enable_shared_from_this<basic_endpoint<Role, PacketIdBytes, NextLayer>> {
     enum class connection_status {
         connecting,
         connected,
diff --git a/include/async_mqtt/impl/client_impl.ipp b/include/async_mqtt/impl/client_impl.ipp
index 8d785b22a..48b8abff4 100644
--- a/include/async_mqtt/impl/client_impl.ipp
+++ b/include/async_mqtt/impl/client_impl.ipp
@@ -27,7 +27,7 @@ ASYNC_MQTT_HEADER_ONLY_INLINE
 void
 client<Version, NextLayer>::recv_loop() {
     ep_->async_recv(
-        [this]
+        [this, sp = this->shared_from_this()]
         (error_code const& ec, packet_variant pv) mutable {
             if (ec) {
                 recv_queue_.emplace_back(ec);
diff --git a/include/async_mqtt/impl/endpoint_recv.hpp b/include/async_mqtt/impl/endpoint_recv.hpp
index 0aa0c3209..18fe3ad0a 100644
--- a/include/async_mqtt/impl/endpoint_recv.hpp
+++ b/include/async_mqtt/impl/endpoint_recv.hpp
@@ -23,6 +23,7 @@ recv_op {
     std::set<control_packet_type> types = {};
     std::optional<error_code> decided_error = std::nullopt;
     enum { initiate, disconnect, close, read } state = initiate;
+    this_type_sp life_keeper = ep.shared_from_this();
 
     template <typename Self>
     void operator()(


Test patch:
diff --git a/test/system/st_cancel.cpp b/test/system/st_cancel.cpp
index 0e9bf2cdf..8c9f0013f 100644
--- a/test/system/st_cancel.cpp
+++ b/test/system/st_cancel.cpp
@@ -116,19 +116,19 @@ BOOST_AUTO_TEST_CASE(cl) {
     broker_runner br;
     as::io_context ioc;
     using cl_t = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>;
-    cl_t amcl{
+    auto amcl = cl_t::create(
         ioc.get_executor()
-    };
+    );
 
     as::cancellation_signal sig1;
     std::size_t canceled = 0;
     am::async_underlying_handshake(
-        amcl.next_layer(),
+        amcl->next_layer(),
         "127.0.0.1",
         "1883",
         [&](am::error_code const& ec) {
             BOOST_TEST(ec == am::error_code{});
-            amcl.async_start(
+            amcl->async_start(
                 am::v3_1_1::connect_packet{
                     true,   // clean_session
                     0x1234, // keep_alive
@@ -141,21 +141,21 @@ BOOST_AUTO_TEST_CASE(cl) {
                     BOOST_TEST(!ec);
                     BOOST_CHECK(connack_opt);
                     // test case
-                    amcl.async_recv(
+                    amcl->async_recv(
                         as::bind_cancellation_slot(
                             sig1.slot(),
                             [&](am::error_code const& ec, am::packet_variant pv) {
                                 BOOST_TEST(ec == as::error::operation_aborted);
                                 BOOST_TEST(!pv);
                                 ++canceled;
-                                amcl.async_recv(
+                                amcl->async_recv(
                                     as::bind_cancellation_slot(
                                         sig1.slot(),
                                         [&](am::error_code const& ec, am::packet_variant pv) {
                                             BOOST_TEST(ec == as::error::operation_aborted);
                                             BOOST_TEST(!pv);
                                             ++canceled;
-                                            amcl.async_close(as::detached);
+                                            amcl->async_close(as::detached);
                                         }
                                     )
                                 );
diff --git a/test/system/st_cpp20coro_client.cpp b/test/system/st_cpp20coro_client.cpp
index 16e74b705..d5964ac71 100644
--- a/test/system/st_cpp20coro_client.cpp
+++ b/test/system/st_cpp20coro_client.cpp
@@ -22,20 +22,20 @@ BOOST_AUTO_TEST_CASE(v311) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>(exe);
+    auto amcl = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::use_awaitable
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883",
                 as::as_tuple(as::use_awaitable)
@@ -43,7 +43,7 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(!ec_und);
 
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 am::v3_1_1::connect_packet{
                     true,   // clean_session
                     0,      // keep_alive
@@ -66,9 +66,9 @@ BOOST_AUTO_TEST_CASE(v311) {
                 {"topic2", am::qos::at_least_once},
                 {"topic3", am::qos::exactly_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 am::v3_1_1::subscribe_packet{
                     *pid_sub_opt,
                     am::force_move(sub_entry) // sub_entry variable is required to avoid g++ bug
@@ -90,7 +90,7 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(suback == exp_suback);
 
             // MQTT publish QoS0 and wait response (socket write complete)
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 am::v3_1_1::publish_packet{
                     "topic1",
                     "payload1",
@@ -104,9 +104,9 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_CHECK(!pubres0.pubcomp_opt);
 
             // MQTT publish QoS1 and wait response (puback receive)
-            auto [ec_pid1, pid_pub1] = co_await amcl.async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
+            auto [ec_pid1, pid_pub1] = co_await amcl->async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
             BOOST_TEST(!ec_pid1);
-            auto [ec_pub1, pubres1] = co_await amcl.async_publish(
+            auto [ec_pub1, pubres1] = co_await amcl->async_publish(
                 am::v3_1_1::publish_packet{
                     pid_pub1,
                     "topic1",
@@ -124,9 +124,9 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(puback1 == exp_puback1);
 
             // MQTT publish QoS2 and wait response (pubrec, pubcomp receive)
-            auto [ec_pid2, pid_pub2] = co_await amcl.async_acquire_unique_packet_id_wait_until(as::as_tuple(as::use_awaitable)); // async version
+            auto [ec_pid2, pid_pub2] = co_await amcl->async_acquire_unique_packet_id_wait_until(as::as_tuple(as::use_awaitable)); // async version
             BOOST_TEST(!ec_pid2);
-            auto [ec_pub2, pubres2] = co_await amcl.async_publish(
+            auto [ec_pub2, pubres2] = co_await amcl->async_publish(
                 am::v3_1_1::publish_packet{
                     pid_pub2,
                     "topic1",
@@ -152,9 +152,9 @@ BOOST_AUTO_TEST_CASE(v311) {
                 {"topic2"},
                 {"topic3"},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 am::v3_1_1::unsubscribe_packet{
                     *pid_unsub_opt,
                     am::force_move(unsub_entry) // unsub_entry variable is required to avoid g++ bug
@@ -171,14 +171,14 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(unsuback == exp_unsuback);
 
             // MQTT disconnect
-            auto [ec_disconnect] = co_await amcl.async_disconnect(
+            auto [ec_disconnect] = co_await amcl->async_disconnect(
                 am::v3_1_1::disconnect_packet{},
                 as::as_tuple(as::use_awaitable)
             );
             BOOST_TEST(!ec_disconnect);
 
             // close
-            co_await amcl.async_close(
+            co_await amcl->async_close(
                 as::as_tuple(as::use_awaitable)
             );
             co_return;
@@ -192,20 +192,20 @@ BOOST_AUTO_TEST_CASE(v5) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = am::client<am::protocol_version::v5, am::protocol::mqtt>(exe);
+    auto amcl = am::client<am::protocol_version::v5, am::protocol::mqtt>::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::use_awaitable
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883",
                 as::as_tuple(as::use_awaitable)
@@ -213,7 +213,7 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(!ec_und);
 
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 am::v5::connect_packet{
                     true,   // clean_session
                     0,      // keep_alive
@@ -243,9 +243,9 @@ BOOST_AUTO_TEST_CASE(v5) {
                 {"topic2", am::qos::at_least_once},
                 {"topic3", am::qos::exactly_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 am::v5::subscribe_packet{
                     *pid_sub_opt,
                     am::force_move(sub_entry) // sub_entry variable is required to avoid g++ bug
@@ -267,7 +267,7 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(suback == exp_suback);
 
             // MQTT publish QoS0 and wait response (socket write complete)
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 am::v5::publish_packet{
                     "topic1",
                     "payload1",
@@ -281,11 +281,11 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_CHECK(!pubres0.pubcomp_opt);
 
             // MQTT publish QoS1 and wait response (puback receive)
-            auto [ec_pid1, pid_pub1] = co_await amcl.get_endpoint().async_acquire_unique_packet_id(
+            auto [ec_pid1, pid_pub1] = co_await amcl->get_endpoint().async_acquire_unique_packet_id(
                 as::as_tuple(as::use_awaitable)
             ); // async version via endpoint
             BOOST_TEST(!ec_pid1);
-            auto [ec_pub1, pubres1] = co_await amcl.async_publish(
+            auto [ec_pub1, pubres1] = co_await amcl->async_publish(
                 am::v5::publish_packet{
                     pid_pub1,
                     "topic2",
@@ -303,9 +303,9 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(puback1 == exp_puback1);
 
             // MQTT publish QoS2 and wait response (pubrec, pubcomp receive)
-            auto [ec_pid2, pid_pub2] = co_await amcl.async_acquire_unique_packet_id_wait_until(as::as_tuple(as::use_awaitable)); // async version
+            auto [ec_pid2, pid_pub2] = co_await amcl->async_acquire_unique_packet_id_wait_until(as::as_tuple(as::use_awaitable)); // async version
             BOOST_TEST(!ec_pid2);
-            auto [ec_pub2, pubres2] = co_await amcl.async_publish(
+            auto [ec_pub2, pubres2] = co_await amcl->async_publish(
                 am::v5::publish_packet{
                     pid_pub2,
                     "topic3",
@@ -331,9 +331,9 @@ BOOST_AUTO_TEST_CASE(v5) {
                 {"topic2"},
                 {"topic3"},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 am::v5::unsubscribe_packet{
                     *pid_unsub_opt,
                     am::force_move(unsub_entry) // unsub_entry variable is required to avoid g++ bug
@@ -355,14 +355,14 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(unsuback == exp_unsuback);
 
             // MQTT disconnect
-            auto [ec_disconnect] = co_await amcl.async_disconnect(
+            auto [ec_disconnect] = co_await amcl->async_disconnect(
                 am::v5::disconnect_packet{},
                 as::as_tuple(as::use_awaitable)
             );
             BOOST_TEST(!ec_disconnect);
 
             // close
-            co_await amcl.async_close(
+            co_await amcl->async_close(
                 as::as_tuple(as::use_awaitable)
             );
             co_return;
diff --git a/test/system/st_cpp20coro_client_direct.cpp b/test/system/st_cpp20coro_client_direct.cpp
index e168d60da..c5181391f 100644
--- a/test/system/st_cpp20coro_client_direct.cpp
+++ b/test/system/st_cpp20coro_client_direct.cpp
@@ -22,20 +22,20 @@ BOOST_AUTO_TEST_CASE(v311) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>(exe);
+    auto amcl = am::client<am::protocol_version::v3_1_1, am::protocol::mqtt>::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::use_awaitable
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883",
                 as::as_tuple(as::use_awaitable)
@@ -43,7 +43,7 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(!ec_und);
 
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0),      // keep_alive
                 "cid1",
@@ -64,9 +64,9 @@ BOOST_AUTO_TEST_CASE(v311) {
                 {"topic2", am::qos::at_least_once},
                 {"topic3", am::qos::exactly_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 *pid_sub_opt,
                 am::force_move(sub_entry), // sub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
@@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(suback == exp_suback);
 
             // MQTT publish QoS0 and wait response (socket write complete)
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 "topic1",
                 "payload1",
                 am::qos::at_most_once,
@@ -98,9 +98,9 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_CHECK(!pubres0.pubcomp_opt);
 
             // MQTT publish QoS1 and wait response (puback receive)
-            auto [ec_pid1, pid_pub1] = co_await amcl.async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
+            auto [ec_pid1, pid_pub1] = co_await amcl->async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
             BOOST_TEST(!ec_pid1);
-            auto [ec_pub1, pubres1] = co_await amcl.async_publish(
+            auto [ec_pub1, pubres1] = co_await amcl->async_publish(
                 pid_pub1,
                 "topic1",
                 "payload1",
@@ -116,8 +116,8 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(puback1 == exp_puback1);
 
             // MQTT publish QoS2 and wait response (pubrec, pubcomp receive)
-            auto pid_pub2 = co_await amcl.async_acquire_unique_packet_id_wait_until(as::use_awaitable); // async version
-            auto [ec_pub2, pubres2] = co_await amcl.async_publish(
+            auto pid_pub2 = co_await amcl->async_acquire_unique_packet_id_wait_until(as::use_awaitable); // async version
+            auto [ec_pub2, pubres2] = co_await amcl->async_publish(
                 pid_pub2,
                 "topic1",
                 "payload1",
@@ -141,9 +141,9 @@ BOOST_AUTO_TEST_CASE(v311) {
                 {"topic2"},
                 {"topic3"},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 *pid_unsub_opt,
                 am::force_move(unsub_entry), // unsub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
@@ -158,13 +158,13 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(unsuback == exp_unsuback);
 
             // MQTT disconnect
-            auto [ec_disconnect] = co_await amcl.async_disconnect(
+            auto [ec_disconnect] = co_await amcl->async_disconnect(
                 as::as_tuple(as::use_awaitable)
             );
             BOOST_TEST(!ec_disconnect);
 
             // close
-            co_await amcl.async_close(
+            co_await amcl->async_close(
                 as::as_tuple(as::use_awaitable)
             );
             co_return;
@@ -178,20 +178,20 @@ BOOST_AUTO_TEST_CASE(v5) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = am::client<am::protocol_version::v5, am::protocol::mqtt>(exe);
+    auto amcl = am::client<am::protocol_version::v5, am::protocol::mqtt>::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::use_awaitable
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883",
                 as::as_tuple(as::use_awaitable)
@@ -199,7 +199,7 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(!ec_und);
 
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0),      // keep_alive
                 "cid1",
@@ -222,7 +222,7 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(connack == exp_connack);
 
             // MQTT auth
-            auto [ec_auth] = co_await amcl.async_auth(
+            auto [ec_auth] = co_await amcl->async_auth(
                 as::as_tuple(as::use_awaitable)
             );
             BOOST_TEST(!ec_auth);
@@ -233,9 +233,9 @@ BOOST_AUTO_TEST_CASE(v5) {
                 {"topic2", am::qos::at_least_once},
                 {"topic3", am::qos::exactly_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 *pid_sub_opt,
                 am::force_move(sub_entry), // sub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
@@ -255,7 +255,7 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(suback == exp_suback);
 
             // MQTT publish QoS0 and wait response (socket write complete)
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 "topic1",
                 "payload1",
                 am::qos::at_most_once,
@@ -267,9 +267,9 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_CHECK(!pubres0.pubcomp_opt);
 
             // MQTT publish QoS1 and wait response (puback receive)
-            auto [ec_pid1, pid_pub1] = co_await amcl.async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
+            auto [ec_pid1, pid_pub1] = co_await amcl->async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
             BOOST_TEST(!ec_pid1);
-            auto [ec_pub1, pubres1] = co_await amcl.async_publish(
+            auto [ec_pub1, pubres1] = co_await amcl->async_publish(
                 pid_pub1,
                 "topic2",
                 "payload2",
@@ -285,8 +285,8 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(puback1 == exp_puback1);
 
             // MQTT publish QoS2 and wait response (pubrec, pubcomp receive)
-            auto pid_pub2 = co_await amcl.async_acquire_unique_packet_id_wait_until(as::use_awaitable); // async version
-            auto [ec_pub2, pubres2] = co_await amcl.async_publish(
+            auto pid_pub2 = co_await amcl->async_acquire_unique_packet_id_wait_until(as::use_awaitable); // async version
+            auto [ec_pub2, pubres2] = co_await amcl->async_publish(
                 pid_pub2,
                 "topic3",
                 "payload3",
@@ -310,9 +310,9 @@ BOOST_AUTO_TEST_CASE(v5) {
                 {"topic2"},
                 {"topic3"},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 *pid_unsub_opt,
                 am::force_move(unsub_entry), // unsub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
@@ -332,13 +332,13 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(unsuback == exp_unsuback);
 
             // MQTT disconnect
-            auto [ec_disconnect] = co_await amcl.async_disconnect(
+            auto [ec_disconnect] = co_await amcl->async_disconnect(
                 as::as_tuple(as::use_awaitable)
             );
             BOOST_TEST(!ec_disconnect);
 
             // close
-            co_await amcl.async_close(
+            co_await amcl->async_close(
                 as::as_tuple(as::use_awaitable)
             );
             co_return;
diff --git a/test/system/st_cpp20coro_client_direct_default.cpp b/test/system/st_cpp20coro_client_direct_default.cpp
index 01cceb23f..734026dd3 100644
--- a/test/system/st_cpp20coro_client_direct_default.cpp
+++ b/test/system/st_cpp20coro_client_direct_default.cpp
@@ -24,27 +24,27 @@ BOOST_AUTO_TEST_CASE(v311) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = client(exe);
+    auto amcl = client::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::use_awaitable
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883"
             );
             BOOST_TEST(!ec_und);
 
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0),      // keep_alive
                 "cid1",
@@ -64,9 +64,9 @@ BOOST_AUTO_TEST_CASE(v311) {
                 {"topic2", am::qos::at_least_once},
                 {"topic3", am::qos::exactly_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 *pid_sub_opt,
                 am::force_move(sub_entry) // sub_entry variable is required to avoid g++ bug
             );
@@ -85,7 +85,7 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(suback == exp_suback);
 
             // MQTT publish QoS0 and wait response (socket write complete)
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 "topic1",
                 "payload1",
                 am::qos::at_most_once
@@ -96,9 +96,9 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_CHECK(!pubres0.pubcomp_opt);
 
             // MQTT publish QoS1 and wait response (puback receive)
-            auto [ec_pid1, pid_pub1] = co_await amcl.async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
+            auto [ec_pid1, pid_pub1] = co_await amcl->async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
             BOOST_TEST(!ec_pid1);
-            auto [ec_pub1, pubres1] = co_await amcl.async_publish(
+            auto [ec_pub1, pubres1] = co_await amcl->async_publish(
                 pid_pub1,
                 "topic1",
                 "payload1",
@@ -113,8 +113,8 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(puback1 == exp_puback1);
 
             // MQTT publish QoS2 and wait response (pubrec, pubcomp receive)
-            auto pid_pub2 = co_await amcl.async_acquire_unique_packet_id_wait_until(as::use_awaitable); // async version
-            auto [ec_pub2, pubres2] = co_await amcl.async_publish(
+            auto pid_pub2 = co_await amcl->async_acquire_unique_packet_id_wait_until(as::use_awaitable); // async version
+            auto [ec_pub2, pubres2] = co_await amcl->async_publish(
                 pid_pub2,
                 "topic1",
                 "payload1",
@@ -137,9 +137,9 @@ BOOST_AUTO_TEST_CASE(v311) {
                 {"topic2"},
                 {"topic3"},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 *pid_unsub_opt,
                 am::force_move(unsub_entry) // unsub_entry variable is required to avoid g++ bug
             );
@@ -153,12 +153,12 @@ BOOST_AUTO_TEST_CASE(v311) {
             BOOST_TEST(unsuback == exp_unsuback);
 
             // MQTT disconnect
-            auto [ec_disconnect] = co_await amcl.async_disconnect(
+            auto [ec_disconnect] = co_await amcl->async_disconnect(
             );
             BOOST_TEST(!ec_disconnect);
 
             // close
-            co_await amcl.async_close(
+            co_await amcl->async_close(
             );
             co_return;
         },
@@ -173,27 +173,27 @@ BOOST_AUTO_TEST_CASE(v5) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = client(exe);
+    auto amcl = client::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::use_awaitable
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883"
             );
             BOOST_TEST(!ec_und);
 
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0),      // keep_alive
                 "cid1",
@@ -220,9 +220,9 @@ BOOST_AUTO_TEST_CASE(v5) {
                 {"topic2", am::qos::at_least_once},
                 {"topic3", am::qos::exactly_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 *pid_sub_opt,
                 am::force_move(sub_entry) // sub_entry variable is required to avoid g++ bug
             );
@@ -241,7 +241,7 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(suback == exp_suback);
 
             // MQTT publish QoS0 and wait response (socket write complete)
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 "topic1",
                 "payload1",
                 am::qos::at_most_once
@@ -252,9 +252,9 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_CHECK(!pubres0.pubcomp_opt);
 
             // MQTT publish QoS1 and wait response (puback receive)
-            auto [ec_pid1, pid_pub1] = co_await amcl.async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
+            auto [ec_pid1, pid_pub1] = co_await amcl->async_acquire_unique_packet_id(as::as_tuple(as::use_awaitable)); // async version
             BOOST_TEST(!ec_pid1);
-            auto [ec_pub1, pubres1] = co_await amcl.async_publish(
+            auto [ec_pub1, pubres1] = co_await amcl->async_publish(
                 pid_pub1,
                 "topic2",
                 "payload2",
@@ -269,9 +269,9 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(puback1 == exp_puback1);
 
             // MQTT publish QoS2 and wait response (pubrec, pubcomp receive)
-            auto [ec_pid2, pid_pub2] = co_await amcl.async_acquire_unique_packet_id_wait_until(as::as_tuple(as::use_awaitable)); // async version
+            auto [ec_pid2, pid_pub2] = co_await amcl->async_acquire_unique_packet_id_wait_until(as::as_tuple(as::use_awaitable)); // async version
             BOOST_TEST(!ec_pid2);
-            auto [ec_pub2, pubres2] = co_await amcl.async_publish(
+            auto [ec_pub2, pubres2] = co_await amcl->async_publish(
                 pid_pub2,
                 "topic3",
                 "payload3",
@@ -294,9 +294,9 @@ BOOST_AUTO_TEST_CASE(v5) {
                 {"topic2"},
                 {"topic3"},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 *pid_unsub_opt,
                 am::force_move(unsub_entry) // unsub_entry variable is required to avoid g++ bug
             );
@@ -315,12 +315,12 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(unsuback == exp_unsuback);
 
             // MQTT disconnect
-            auto [ec_disconnect] = co_await amcl.async_disconnect(
+            auto [ec_disconnect] = co_await amcl->async_disconnect(
             );
             BOOST_TEST(!ec_disconnect);
 
             // close
-            co_await amcl.async_close(
+            co_await amcl->async_close(
             );
             co_return;
         },
diff --git a/test/system/st_cpp20coro_client_direct_default_error.cpp b/test/system/st_cpp20coro_client_direct_default_error.cpp
index 9ea798453..f316b7e92 100644
--- a/test/system/st_cpp20coro_client_direct_default_error.cpp
+++ b/test/system/st_cpp20coro_client_direct_default_error.cpp
@@ -24,20 +24,20 @@ BOOST_AUTO_TEST_CASE(v311) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = client(exe);
+    auto amcl = client::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::as_tuple(as::use_awaitable)
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883"
             );
@@ -45,7 +45,7 @@ BOOST_AUTO_TEST_CASE(v311) {
 
             std::string ng_str{static_cast<char>(0b1100'0010u), static_cast<char>(0b1100'0000u)}; // invalid utf8
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0),      // keep_alive
                 ng_str,
@@ -59,9 +59,9 @@ BOOST_AUTO_TEST_CASE(v311) {
             std::vector<am::topic_subopts> sub_entry{
                 {ng_str, am::qos::at_most_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 *pid_sub_opt,
                 am::force_move(sub_entry) // sub_entry variable is required to avoid g++ bug
             );
@@ -71,15 +71,15 @@ BOOST_AUTO_TEST_CASE(v311) {
             std::vector<am::topic_sharename> unsub_entry{
                 {ng_str},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 *pid_unsub_opt,
                 am::force_move(unsub_entry) // unsub_entry variable is required to avoid g++ bug
             );
             BOOST_TEST(ec_unsub == am::disconnect_reason_code::topic_filter_invalid);
 
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 ng_str,
                 "payload1",
                 am::qos::at_most_once
@@ -98,20 +98,20 @@ BOOST_AUTO_TEST_CASE(v5) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = client(exe);
+    auto amcl = client::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::as_tuple(as::use_awaitable)
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883"
             );
@@ -119,7 +119,7 @@ BOOST_AUTO_TEST_CASE(v5) {
 
             std::string ng_str{static_cast<char>(0b1100'0010u), static_cast<char>(0b1100'0000u)}; // invalid utf8
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0),      // keep_alive
                 ng_str,
@@ -133,9 +133,9 @@ BOOST_AUTO_TEST_CASE(v5) {
             std::vector<am::topic_subopts> sub_entry{
                 {ng_str, am::qos::at_most_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 *pid_sub_opt,
                 am::force_move(sub_entry) // sub_entry variable is required to avoid g++ bug
             );
@@ -145,15 +145,15 @@ BOOST_AUTO_TEST_CASE(v5) {
             std::vector<am::topic_sharename> unsub_entry{
                 {ng_str},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 *pid_unsub_opt,
                 am::force_move(unsub_entry) // unsub_entry variable is required to avoid g++ bug
             );
             BOOST_TEST(ec_unsub == am::disconnect_reason_code::topic_filter_invalid);
 
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 ng_str,
                 "payload1",
                 am::qos::at_most_once
@@ -161,7 +161,7 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(ec_pub0 == am::disconnect_reason_code::topic_name_invalid);
 
             am::properties props{property::content_type{"test"}}; // invalid property
-            auto [ec_disconnect] = co_await amcl.async_disconnect(
+            auto [ec_disconnect] = co_await amcl->async_disconnect(
                 am::disconnect_reason_code::normal_disconnection,
                 force_move(props)
             );
diff --git a/test/system/st_cpp20coro_client_direct_error.cpp b/test/system/st_cpp20coro_client_direct_error.cpp
index 1aa750dfc..19cfa0b71 100644
--- a/test/system/st_cpp20coro_client_direct_error.cpp
+++ b/test/system/st_cpp20coro_client_direct_error.cpp
@@ -23,20 +23,20 @@ BOOST_AUTO_TEST_CASE(v311) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = client(exe);
+    auto amcl = client::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::as_tuple(as::use_awaitable)
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883",
                 as::as_tuple(as::use_awaitable)
@@ -45,7 +45,7 @@ BOOST_AUTO_TEST_CASE(v311) {
 
             std::string ng_str{static_cast<char>(0b1100'0010u), static_cast<char>(0b1100'0000u)}; // invalid utf8
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0),      // keep_alive
                 ng_str,
@@ -60,9 +60,9 @@ BOOST_AUTO_TEST_CASE(v311) {
             std::vector<am::topic_subopts> sub_entry{
                 {ng_str, am::qos::at_most_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 *pid_sub_opt,
                 am::force_move(sub_entry), // sub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
@@ -73,16 +73,16 @@ BOOST_AUTO_TEST_CASE(v311) {
             std::vector<am::topic_sharename> unsub_entry{
                 {ng_str},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 *pid_unsub_opt,
                 am::force_move(unsub_entry), // unsub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
             );
             BOOST_TEST(ec_unsub == am::disconnect_reason_code::topic_filter_invalid);
 
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 ng_str,
                 "payload1",
                 am::qos::at_most_once,
@@ -101,20 +101,20 @@ BOOST_AUTO_TEST_CASE(v5) {
     broker_runner br;
     as::io_context ioc;
     auto exe = ioc.get_executor();
-    auto amcl = client(exe);
+    auto amcl = client::create(exe);
     as::co_spawn(
         exe,
         [&] () -> as::awaitable<void> {
             co_await as::dispatch(
                 as::bind_executor(
-                    amcl.get_executor(),
+                    amcl->get_executor(),
                     as::as_tuple(as::use_awaitable)
                 )
             );
 
             // Handshake undlerying layer (Name resolution and TCP handshaking)
             auto [ec_und] = co_await am::async_underlying_handshake(
-                amcl.next_layer(),
+                amcl->next_layer(),
                 "127.0.0.1",
                 "1883",
                 as::as_tuple(as::use_awaitable)
@@ -123,7 +123,7 @@ BOOST_AUTO_TEST_CASE(v5) {
 
             std::string ng_str{static_cast<char>(0b1100'0010u), static_cast<char>(0b1100'0000u)}; // invalid utf8
             // MQTT connect and receive loop start
-            auto [ec_con, connack_opt] = co_await amcl.async_start(
+            auto [ec_con, connack_opt] = co_await amcl->async_start(
                 true,   // clean_session
                 std::uint16_t(0),      // keep_alive
                 ng_str,
@@ -138,9 +138,9 @@ BOOST_AUTO_TEST_CASE(v5) {
             std::vector<am::topic_subopts> sub_entry{
                 {ng_str, am::qos::at_most_once},
             };
-            auto pid_sub_opt = amcl.acquire_unique_packet_id();
+            auto pid_sub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_sub_opt);
-            auto [ec_sub, suback_opt] = co_await amcl.async_subscribe(
+            auto [ec_sub, suback_opt] = co_await amcl->async_subscribe(
                 *pid_sub_opt,
                 am::force_move(sub_entry), // sub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
@@ -151,16 +151,16 @@ BOOST_AUTO_TEST_CASE(v5) {
             std::vector<am::topic_sharename> unsub_entry{
                 {ng_str},
             };
-            auto pid_unsub_opt = amcl.acquire_unique_packet_id();
+            auto pid_unsub_opt = amcl->acquire_unique_packet_id();
             BOOST_CHECK(pid_unsub_opt);
-            auto [ec_unsub, unsuback_opt] = co_await amcl.async_unsubscribe(
+            auto [ec_unsub, unsuback_opt] = co_await amcl->async_unsubscribe(
                 *pid_unsub_opt,
                 am::force_move(unsub_entry), // unsub_entry variable is required to avoid g++ bug
                 as::as_tuple(as::use_awaitable)
             );
             BOOST_TEST(ec_unsub == am::disconnect_reason_code::topic_filter_invalid);
 
-            auto [ec_pub0, pubres0] = co_await amcl.async_publish(
+            auto [ec_pub0, pubres0] = co_await amcl->async_publish(
                 ng_str,
                 "payload1",
                 am::qos::at_most_once,
@@ -169,7 +169,7 @@ BOOST_AUTO_TEST_CASE(v5) {
             BOOST_TEST(ec_pub0 == am::disconnect_reason_code::topic_name_invalid);
 
             am::properties props{property::content_type{"test"}}; // invalid property
-            auto [ec_disconnect] = co_await amcl.async_disconnect(
+            auto [ec_disconnect] = co_await amcl->async_disconnect(
                 am::disconnect_reason_code::normal_disconnection,
                 force_move(props),
                 as::as_tuple(as::use_awaitable)
diff --git a/test/unit/ut_cpp20coro_cl.cpp b/test/unit/ut_cpp20coro_cl.cpp
index 8e3e50085..3063ab12e 100644
--- a/test/unit/ut_cpp20coro_cl.cpp
+++ b/test/unit/ut_cpp20coro_cl.cpp
@@ -35,19 +35,19 @@ BOOST_AUTO_TEST_CASE(v311_start_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -56,9 +56,9 @@ BOOST_AUTO_TEST_CASE(v311_start_success) {
                 BOOST_CHECK(connack_opt);
                 BOOST_TEST(*connack_opt == connack);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -77,19 +77,19 @@ BOOST_AUTO_TEST_CASE(v311_start_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::unacceptable_protocol_version
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -100,9 +100,9 @@ BOOST_AUTO_TEST_CASE(v311_start_error) {
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::connect_return_code::unacceptable_protocol_version);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
 
             co_return;
         },
@@ -118,19 +118,19 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -140,7 +140,7 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_success) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v3_1_1::suback_packet{
                     pid,
                     {am::suback_return_code::success_maximum_qos_2},
@@ -150,20 +150,20 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_success) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_CHECK(suback_opt);
                 BOOST_TEST(*suback_opt == suback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -182,19 +182,19 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -204,7 +204,7 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v3_1_1::suback_packet{
                     pid,
                     {am::suback_return_code::failure},
@@ -214,22 +214,22 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_error) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::suback_return_code::failure);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -244,19 +244,19 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_mismatch) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -266,7 +266,7 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_mismatch) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
 
                 // subscribe but unsuback response
                 auto unsuback = am::v3_1_1::unsuback_packet{
@@ -277,22 +277,22 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_single_mismatch) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(unsuback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(unsuback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::disconnect_reason_code::protocol_error);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -307,19 +307,19 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_all_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -329,7 +329,7 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_all_success) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v3_1_1::suback_packet{
                     pid,
                     {
@@ -343,20 +343,20 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_all_success) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_CHECK(suback_opt);
                 BOOST_TEST(*suback_opt == suback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -375,19 +375,19 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_partial_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -397,7 +397,7 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_partial_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v3_1_1::suback_packet{
                     pid,
                     {
@@ -411,20 +411,20 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_partial_error) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_CHECK(suback_opt);
                 BOOST_TEST(*suback_opt == suback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -443,19 +443,19 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_all_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -465,7 +465,7 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_all_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v3_1_1::suback_packet{
                     pid,
                     {
@@ -479,22 +479,22 @@ BOOST_AUTO_TEST_CASE(v311_subscribe_multi_all_error) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::mqtt_error::all_error_detected);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -509,19 +509,19 @@ BOOST_AUTO_TEST_CASE(v311_unsubscribe) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -531,7 +531,7 @@ BOOST_AUTO_TEST_CASE(v311_unsubscribe) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto unsuback = am::v3_1_1::unsuback_packet{
                     pid
                 };
@@ -540,20 +540,20 @@ BOOST_AUTO_TEST_CASE(v311_unsubscribe) {
                 };
 
                 auto unsuback_opt = co_await(
-                    cl.async_unsubscribe(
+                    cl->async_unsubscribe(
                         pid,
                         unsub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(unsuback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(unsuback, as::use_awaitable)
                 );
                 BOOST_CHECK(unsuback_opt);
                 BOOST_TEST(*unsuback_opt == unsuback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -572,19 +572,19 @@ BOOST_AUTO_TEST_CASE(v311_unsubscribe_mismatch) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -594,7 +594,7 @@ BOOST_AUTO_TEST_CASE(v311_unsubscribe_mismatch) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 // unsubscribe send but suback response
                 auto suback = am::v3_1_1::suback_packet{
                     pid,
@@ -605,22 +605,22 @@ BOOST_AUTO_TEST_CASE(v311_unsubscribe_mismatch) {
                 };
 
                 auto unsuback_opt = co_await(
-                    cl.async_unsubscribe(
+                    cl->async_unsubscribe(
                         pid,
                         unsub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::disconnect_reason_code::protocol_error);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -635,19 +635,19 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos0) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -658,7 +658,7 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos0) {
 
                 // test scenario
                 auto pubres = co_await
-                    cl.async_publish(
+                    cl->async_publish(
                         "topic1",
                         "payload1",
                         am::qos::at_most_once,
@@ -668,9 +668,9 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos0) {
                 BOOST_CHECK(!pubres.pubrec_opt);
                 BOOST_CHECK(!pubres.pubcomp_opt);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -689,19 +689,19 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos1) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -711,13 +711,13 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos1) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto puback = am::v3_1_1::puback_packet{
                     pid
                 };
 
                 auto pubres = co_await(
-                    cl.async_publish(
+                    cl->async_publish(
                         pid,
                         "topic1",
                         "payload1",
@@ -725,16 +725,16 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos1) {
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(puback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(puback, as::use_awaitable)
                 );
                 BOOST_CHECK(pubres.puback_opt);
                 BOOST_CHECK(!pubres.pubrec_opt);
                 BOOST_CHECK(!pubres.pubcomp_opt);
                 BOOST_TEST(*pubres.puback_opt == puback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -753,19 +753,19 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos2) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -775,7 +775,7 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos2) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto pubrec = am::v3_1_1::pubrec_packet{
                     pid
                 };
@@ -784,7 +784,7 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos2) {
                 };
 
                 auto pubres = co_await(
-                    cl.async_publish(
+                    cl->async_publish(
                         pid,
                         "topic1",
                         "payload1",
@@ -792,9 +792,9 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos2) {
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(pubrec, as::use_awaitable)
+                    cl->next_layer().emulate_recv(pubrec, as::use_awaitable)
                     &&
-                    cl.next_layer().emulate_recv(pubcomp, as::use_awaitable)
+                    cl->next_layer().emulate_recv(pubcomp, as::use_awaitable)
                 );
                 BOOST_CHECK(!pubres.puback_opt);
                 BOOST_CHECK(pubres.pubrec_opt);
@@ -802,9 +802,9 @@ BOOST_AUTO_TEST_CASE(v311_publish_qos2) {
                 BOOST_TEST(*pubres.pubrec_opt == pubrec);
                 BOOST_TEST(*pubres.pubcomp_opt == pubcomp);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -823,19 +823,19 @@ BOOST_AUTO_TEST_CASE(v5_start_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -844,9 +844,9 @@ BOOST_AUTO_TEST_CASE(v5_start_success) {
                 BOOST_CHECK(connack_opt);
                 BOOST_TEST(*connack_opt == connack);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -865,19 +865,19 @@ BOOST_AUTO_TEST_CASE(v5_start_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::unsupported_protocol_version
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -888,9 +888,9 @@ BOOST_AUTO_TEST_CASE(v5_start_error) {
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::connect_reason_code::unsupported_protocol_version);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
 
             co_return;
         },
@@ -906,19 +906,19 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_single_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -928,7 +928,7 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_single_success) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v5::suback_packet{
                     pid,
                     {am::suback_reason_code::granted_qos_2},
@@ -938,20 +938,20 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_single_success) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_CHECK(suback_opt);
                 BOOST_TEST(*suback_opt == suback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -970,19 +970,19 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_single_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -992,7 +992,7 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_single_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v5::suback_packet{
                     pid,
                     {am::suback_reason_code::not_authorized},
@@ -1002,22 +1002,22 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_single_error) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::suback_reason_code::not_authorized);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -1032,19 +1032,19 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_all_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1054,7 +1054,7 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_all_success) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v5::suback_packet{
                     pid,
                     {
@@ -1068,20 +1068,20 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_all_success) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_CHECK(suback_opt);
                 BOOST_TEST(*suback_opt == suback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1100,19 +1100,19 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_partial_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1122,7 +1122,7 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_partial_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v5::suback_packet{
                     pid,
                     {
@@ -1136,20 +1136,20 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_partial_error) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_CHECK(suback_opt);
                 BOOST_TEST(*suback_opt == suback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1168,19 +1168,19 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_all_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1190,7 +1190,7 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_all_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto suback = am::v5::suback_packet{
                     pid,
                     {
@@ -1204,22 +1204,22 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_multi_all_error) {
                 };
 
                 auto suback_opt = co_await(
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(suback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(suback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::mqtt_error::all_error_detected);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -1235,19 +1235,19 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_single_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1257,7 +1257,7 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_single_success) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto unsuback = am::v5::unsuback_packet{
                     pid,
                     {am::unsuback_reason_code::success},
@@ -1267,20 +1267,20 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_single_success) {
                 };
 
                 auto unsuback_opt = co_await(
-                    cl.async_unsubscribe(
+                    cl->async_unsubscribe(
                         pid,
                         unsub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(unsuback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(unsuback, as::use_awaitable)
                 );
                 BOOST_CHECK(unsuback_opt);
                 BOOST_TEST(*unsuback_opt == unsuback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1299,19 +1299,19 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_single_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1321,7 +1321,7 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_single_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto unsuback = am::v5::unsuback_packet{
                     pid,
                     {am::unsuback_reason_code::not_authorized},
@@ -1331,22 +1331,22 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_single_error) {
                 };
 
                 auto unsuback_opt = co_await(
-                    cl.async_unsubscribe(
+                    cl->async_unsubscribe(
                         pid,
                         unsub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(unsuback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(unsuback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::unsuback_reason_code::not_authorized);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -1361,19 +1361,19 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_all_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1383,7 +1383,7 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_all_success) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto unsuback = am::v5::unsuback_packet{
                     pid,
                     {
@@ -1397,20 +1397,20 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_all_success) {
                 };
 
                 auto unsuback_opt = co_await(
-                    cl.async_unsubscribe(
+                    cl->async_unsubscribe(
                         pid,
                         unsub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(unsuback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(unsuback, as::use_awaitable)
                 );
                 BOOST_CHECK(unsuback_opt);
                 BOOST_TEST(*unsuback_opt == unsuback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1429,19 +1429,19 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_partial_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1451,7 +1451,7 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_partial_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto unsuback = am::v5::unsuback_packet{
                     pid,
                     {
@@ -1465,20 +1465,20 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_partial_error) {
                 };
 
                 auto unsuback_opt = co_await(
-                    cl.async_unsubscribe(
+                    cl->async_unsubscribe(
                         pid,
                         unsub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(unsuback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(unsuback, as::use_awaitable)
                 );
                 BOOST_CHECK(unsuback_opt);
                 BOOST_TEST(*unsuback_opt == unsuback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1497,19 +1497,19 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_all_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1519,7 +1519,7 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_all_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto unsuback = am::v5::unsuback_packet{
                     pid,
                     {
@@ -1533,22 +1533,22 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_multi_all_error) {
                 };
 
                 auto unsuback_opt = co_await(
-                    cl.async_unsubscribe(
+                    cl->async_unsubscribe(
                         pid,
                         unsub_entry,
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(unsuback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(unsuback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::mqtt_error::all_error_detected);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -1564,19 +1564,19 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos0) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1587,7 +1587,7 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos0) {
 
                 // test scenario
                 auto pubres = co_await
-                    cl.async_publish(
+                    cl->async_publish(
                         "topic1",
                         "payload1",
                         am::qos::at_most_once,
@@ -1597,9 +1597,9 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos0) {
                 BOOST_CHECK(!pubres.pubrec_opt);
                 BOOST_CHECK(!pubres.pubcomp_opt);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1618,19 +1618,19 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1640,14 +1640,14 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_success) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto puback = am::v5::puback_packet{
                     pid,
                     am::puback_reason_code::success
                 };
 
                 auto pubres = co_await(
-                    cl.async_publish(
+                    cl->async_publish(
                         pid,
                         "topic1",
                         "payload1",
@@ -1655,16 +1655,16 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_success) {
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(puback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(puback, as::use_awaitable)
                 );
                 BOOST_CHECK(pubres.puback_opt);
                 BOOST_CHECK(!pubres.pubrec_opt);
                 BOOST_CHECK(!pubres.pubcomp_opt);
                 BOOST_TEST(*pubres.puback_opt == puback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1683,19 +1683,19 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_success_no_match) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1705,14 +1705,14 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_success_no_match) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto puback = am::v5::puback_packet{
                     pid,
                     am::puback_reason_code::no_matching_subscribers
                 };
 
                 auto pubres = co_await(
-                    cl.async_publish(
+                    cl->async_publish(
                         pid,
                         "topic1",
                         "payload1",
@@ -1720,16 +1720,16 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_success_no_match) {
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(puback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(puback, as::use_awaitable)
                 );
                 BOOST_CHECK(pubres.puback_opt);
                 BOOST_CHECK(!pubres.pubrec_opt);
                 BOOST_CHECK(!pubres.pubcomp_opt);
                 BOOST_TEST(*pubres.puback_opt == puback);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1748,19 +1748,19 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1770,14 +1770,14 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto puback = am::v5::puback_packet{
                     pid,
                     am::puback_reason_code::not_authorized
                 };
 
                 auto pubres = co_await(
-                    cl.async_publish(
+                    cl->async_publish(
                         pid,
                         "topic1",
                         "payload1",
@@ -1785,16 +1785,16 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos1_error) {
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(puback, as::use_awaitable)
+                    cl->next_layer().emulate_recv(puback, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::puback_reason_code::not_authorized);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -1809,19 +1809,19 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1831,7 +1831,7 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto pubrec = am::v5::pubrec_packet{
                     pid,
                     am::pubrec_reason_code::success
@@ -1842,7 +1842,7 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success) {
                 };
 
                 auto pubres = co_await(
-                    cl.async_publish(
+                    cl->async_publish(
                         pid,
                         "topic1",
                         "payload1",
@@ -1850,9 +1850,9 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success) {
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(pubrec, as::use_awaitable)
+                    cl->next_layer().emulate_recv(pubrec, as::use_awaitable)
                     &&
-                    cl.next_layer().emulate_recv(pubcomp, as::use_awaitable)
+                    cl->next_layer().emulate_recv(pubcomp, as::use_awaitable)
                 );
                 BOOST_CHECK(!pubres.puback_opt);
                 BOOST_CHECK(pubres.pubrec_opt);
@@ -1860,9 +1860,9 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success) {
                 BOOST_TEST(*pubres.pubrec_opt == pubrec);
                 BOOST_TEST(*pubres.pubcomp_opt == pubcomp);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -1881,19 +1881,19 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success_error_pubrec) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1903,14 +1903,14 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success_error_pubrec) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto pubrec = am::v5::pubrec_packet{
                     pid,
                     am::pubrec_reason_code::not_authorized
                 };
 
                 auto pubres = co_await(
-                    cl.async_publish(
+                    cl->async_publish(
                         pid,
                         "topic1",
                         "payload1",
@@ -1918,16 +1918,16 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success_error_pubrec) {
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(pubrec, as::use_awaitable)
+                    cl->next_layer().emulate_recv(pubrec, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::pubrec_reason_code::not_authorized);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -1942,19 +1942,19 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success_error_pubcomp) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -1964,7 +1964,7 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success_error_pubcomp) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 auto pubrec = am::v5::pubrec_packet{
                     pid,
                     am::pubrec_reason_code::success
@@ -1975,7 +1975,7 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success_error_pubcomp) {
                 };
 
                 auto pubres = co_await(
-                    cl.async_publish(
+                    cl->async_publish(
                         pid,
                         "topic1",
                         "payload1",
@@ -1983,18 +1983,18 @@ BOOST_AUTO_TEST_CASE(v5_publish_qos2_success_error_pubcomp) {
                         as::use_awaitable
                     )
                     &&
-                    cl.next_layer().emulate_recv(pubrec, as::use_awaitable)
+                    cl->next_layer().emulate_recv(pubrec, as::use_awaitable)
                     &&
-                    cl.next_layer().emulate_recv(pubcomp, as::use_awaitable)
+                    cl->next_layer().emulate_recv(pubcomp, as::use_awaitable)
                 );
                 BOOST_TEST(false);
             }
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::pubcomp_reason_code::packet_identifier_not_found);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -2009,20 +2009,20 @@ BOOST_AUTO_TEST_CASE(v5_recv_auth_disconnect_fast) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 // setup
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2034,21 +2034,21 @@ BOOST_AUTO_TEST_CASE(v5_recv_auth_disconnect_fast) {
                 // test case
                 auto auth = am::v5::auth_packet{};
                 auto disconnect = am::v5::disconnect_packet{};
-                co_await cl.next_layer().emulate_recv(auth, as::use_awaitable);
-                co_await cl.next_layer().emulate_recv(disconnect, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(auth, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(disconnect, as::use_awaitable);
                 {
-                    auto pv = co_await cl.async_recv(as::use_awaitable);
+                    auto pv = co_await cl->async_recv(as::use_awaitable);
                     BOOST_TEST(pv == auth);
                 }
                 {
-                    auto pv = co_await cl.async_recv(as::use_awaitable);
+                    auto pv = co_await cl->async_recv(as::use_awaitable);
                     BOOST_TEST(pv == disconnect);
                 }
 
                 // tear down
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -2067,20 +2067,20 @@ BOOST_AUTO_TEST_CASE(v5_recv_disconnect_last) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 // setup
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2092,15 +2092,15 @@ BOOST_AUTO_TEST_CASE(v5_recv_disconnect_last) {
                 // test case
                 auto disconnect = am::v5::disconnect_packet{};
                 auto pv = co_await (
-                    cl.next_layer().emulate_recv(disconnect, as::use_awaitable) &&
-                    cl.async_recv(as::use_awaitable)
+                    cl->next_layer().emulate_recv(disconnect, as::use_awaitable) &&
+                    cl->async_recv(as::use_awaitable)
                 );
                 BOOST_TEST(pv == disconnect);
 
                 // tear down
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -2119,19 +2119,19 @@ BOOST_AUTO_TEST_CASE(v5_publish_send_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2141,13 +2141,13 @@ BOOST_AUTO_TEST_CASE(v5_publish_send_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                cl.next_layer().set_send_error_code(
+                cl->next_layer().set_send_error_code(
                     make_error_code(
                         am::errc::connection_reset
                     )
                 );
                 auto [ec, pubres] = co_await
-                    cl.async_publish(
+                    cl->async_publish(
                         "topic1",
                         "payload1",
                         am::qos::at_most_once,
@@ -2159,9 +2159,9 @@ BOOST_AUTO_TEST_CASE(v5_publish_send_error) {
                 BOOST_CHECK(!pubres.pubrec_opt);
                 BOOST_CHECK(!pubres.pubcomp_opt);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -2180,18 +2180,18 @@ BOOST_AUTO_TEST_CASE(v5_connect_send_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
-                cl.next_layer().set_send_error_code(
+                cl->next_layer().set_send_error_code(
                     make_error_code(
                         am::errc::connection_reset
                     )
                 );
-                co_await cl.async_start(
+                co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2202,9 +2202,9 @@ BOOST_AUTO_TEST_CASE(v5_connect_send_error) {
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::errc::connection_reset);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -2219,19 +2219,19 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_send_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2241,19 +2241,19 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_send_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                cl.next_layer().set_send_error_code(
+                cl->next_layer().set_send_error_code(
                     make_error_code(
                         am::errc::connection_reset
                     )
                 );
 
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 std::vector<am::topic_subopts> sub_entry{
                     {"topic1", am::qos::exactly_once},
                 };
 
                 auto [ec, suback_opt] = co_await
-                    cl.async_subscribe(
+                    cl->async_subscribe(
                         pid,
                         sub_entry,
                         as::as_tuple(as::use_awaitable)
@@ -2261,9 +2261,9 @@ BOOST_AUTO_TEST_CASE(v5_subscribe_send_error) {
                 BOOST_TEST(ec == am::errc::connection_reset);
                 BOOST_CHECK(!suback_opt);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -2282,19 +2282,19 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_send_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2304,19 +2304,19 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_send_error) {
                 BOOST_TEST(*connack_opt == connack);
 
                 // test scenario
-                cl.next_layer().set_send_error_code(
+                cl->next_layer().set_send_error_code(
                     make_error_code(
                         am::errc::connection_reset
                     )
                 );
 
-                auto pid = *cl.acquire_unique_packet_id();
+                auto pid = *cl->acquire_unique_packet_id();
                 std::vector<am::topic_sharename> unsub_entry{
                     {"topic1"},
                 };
 
                 auto [ec, unsuback_opt] = co_await
-                    cl.async_unsubscribe(
+                    cl->async_unsubscribe(
                         pid,
                         unsub_entry,
                         as::as_tuple(as::use_awaitable)
@@ -2324,9 +2324,9 @@ BOOST_AUTO_TEST_CASE(v5_unsubscribe_send_error) {
                 BOOST_TEST(ec == am::errc::connection_reset);
                 BOOST_CHECK(!unsuback_opt);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -2345,19 +2345,19 @@ BOOST_AUTO_TEST_CASE(v5_auth_success) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2366,13 +2366,13 @@ BOOST_AUTO_TEST_CASE(v5_auth_success) {
                 BOOST_CHECK(connack_opt);
                 BOOST_TEST(*connack_opt == connack);
 
-                co_await cl.async_auth(
+                co_await cl->async_auth(
                     as::use_awaitable
                 );
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -2391,19 +2391,19 @@ BOOST_AUTO_TEST_CASE(v5_auth_error) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v5::connack_packet{
                     false,   // session_present
                     am::connect_reason_code::success
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_start
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2416,7 +2416,7 @@ BOOST_AUTO_TEST_CASE(v5_auth_error) {
                     am::property::will_delay_interval{1}
                 };
 
-                co_await cl.async_auth(
+                co_await cl->async_auth(
                     am::auth_reason_code::success,
                     props,
                     as::use_awaitable
@@ -2426,9 +2426,9 @@ BOOST_AUTO_TEST_CASE(v5_auth_error) {
             catch (am::system_error const& se) {
                 BOOST_TEST(se.code() == am::disconnect_reason_code::malformed_packet);
             }
-            co_await cl.next_layer().emulate_close(as::use_awaitable);
-            co_await cl.async_close(as::use_awaitable);
-            co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+            co_await cl->next_layer().emulate_close(as::use_awaitable);
+            co_await cl->async_close(as::use_awaitable);
+            co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             co_return;
         },
         as::detached
@@ -2445,19 +2445,19 @@ BOOST_AUTO_TEST_CASE(v311_start_success_promise) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2466,9 +2466,9 @@ BOOST_AUTO_TEST_CASE(v311_start_success_promise) {
                 BOOST_CHECK(connack_opt);
                 BOOST_TEST(*connack_opt == connack);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);
@@ -2489,19 +2489,19 @@ BOOST_AUTO_TEST_CASE(v311_start_success_deferred) {
         ioc.get_executor(),
         [&]() -> as::awaitable<void> {
             auto exe = co_await as::this_coro::executor;
-            auto cl = am::client<version, am::cpp20coro_stub_socket>{
+            auto cl = am::client<version, am::cpp20coro_stub_socket>::create(
                 // for stub_socket args
                 version,
                 am::force_move(exe)
-            };
+            );
             try {
                 auto connack = am::v3_1_1::connack_packet{
                     false,   // session_present
                     am::connect_return_code::accepted
                 };
-                co_await cl.next_layer().emulate_recv(connack, as::use_awaitable);
+                co_await cl->next_layer().emulate_recv(connack, as::use_awaitable);
 
-                auto connack_opt = co_await cl.async_start(
+                auto connack_opt = co_await cl->async_start(
                     true,             // clean_session
                     std::uint16_t(0), // keep_alive
                     "cid1",
@@ -2510,9 +2510,9 @@ BOOST_AUTO_TEST_CASE(v311_start_success_deferred) {
                 BOOST_CHECK(connack_opt);
                 BOOST_TEST(*connack_opt == connack);
 
-                co_await cl.next_layer().emulate_close(as::use_awaitable);
-                co_await cl.async_close(as::use_awaitable);
-                co_await cl.next_layer().wait_response(as::as_tuple(as::deferred));
+                co_await cl->next_layer().emulate_close(as::use_awaitable);
+                co_await cl->async_close(as::use_awaitable);
+                co_await cl->next_layer().wait_response(as::as_tuple(as::deferred));
             }
             catch (am::system_error const&) {
                 BOOST_TEST(false);