title: How to prevent type from being used as a member variable type in a struct/class?
body: <p>I want to create type that can be used only as a complete type, not as a member variable type.</p>
  
  <p>So this shall be allowed for such <code>T</code> type:</p>
  
  <pre><code>T a;
  ^^^
  int foo(T b);
          ^^^
  struct C { int foo(T b); };
                     ^^^
  int main() { T c; }
               ^^^
  </code></pre>
  
  <p>But this shall cause compile time error:</p>
  
  <pre><code>struct C { T a; };
             ^^^
  </code></pre>
  
  <p>I would like very much to present anything I tried so far, but there is nothing which can be at least close to solution I need, sorry for that.</p>
  
  <p><strong>Of course, I also accept answer proving this is not possible in C++.</strong></p>
  
  <p>Why do I need this? I want to have <code>smart pointer</code> which cannot be an element of another object. A poor way to prevent circular dependencies... </p>