title: Why do I get "the trait bound Future is not satisfied" when using .await or in a macro like `join!`?
body: <p>I'm working on an asynchronous Rust program but the <code>join!</code> macro doesn't work. <code>.await</code> also does not work. Where is my problem ?</p>
  
  <p>I saw examples in the <a href="https://rust-lang.github.io/async-book/01_getting_started/04_async_await_primer.html" rel="nofollow noreferrer">official documentation</a>.</p>
  
  <p>This also doesn't work:</p>
  
  <pre><code>#[async_std::main]
  async fn main() {}
  </code></pre>
  
  <p>I didn't use Tokio or Hyper because its a simple program.</p>
  
  <pre><code>use async_std::task;
  use futures::executor::block_on;
  use futures::join;
  use futures::stream::{FuturesUnordered, StreamExt};
  use rand::distributions::{Distribution, Uniform};
  use std::thread;
  use std::time::{Duration, Instant};
  
  fn main() {
      let start = "bename Allah";
      println!("{}", start);
  
      fn fibonacci(n: u64) -&gt; u64 {
          if n &lt;= 1 {
              return 1;
          } else {
              return fibonacci(n - 1) + fibonacci(n - 2);
          }
      }
  
      fn fib(n: u64) {
          println!("Its : {}", fibonacci(n));
      }
  
      async fn calculate() {
          let do1 = fib(45);
          let do2 = fib(20);
  
          join!(do1, do2);
      }
  
      calculate();
      //i used block_on(calculate()) but got same error :(
  }
  </code></pre>
  
  <pre><code>[dependencies]
  futures = "0.3.1"
  rand = "0.7"
  async-std = { version = "1.2", features = ["attributes"] }
  surf = "1.0"
  </code></pre>
  
  <p>I get this error:</p>
  
  <pre class="lang-none prettyprint-override"><code>error[E0277]: the trait bound `(): core::future::future::Future` is not satisfied
    --&gt; src\main.rs:28:15
     |
  28 |         join!(do1,do2);
     |               ^^^ the trait `core::future::future::Future` is not implemented for `()`
     | 
    ::: C:\Users\Mahdi\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-util-0.3.4\src\future\maybe_done.rs:42:24
     |
  42 | pub fn maybe_done&lt;Fut: Future&gt;(future: Fut) -&gt; MaybeDone&lt;Fut&gt; {
     |                        ------ required by this bound in `futures_util::future::maybe_done::maybe_done`
  </code></pre>