 <p><strong>[UPDATE: IT'S WORTH JUMPING TO THE <em>EDIT</em> SECTION]</strong></p> <p>Ok, I found a solution, even though it doesn't compile with all the compilers because of a bug in GCC (see <a href="http://stackoverflow.com/questions/35790350/noexcept-inheriting-constructors-and-the-invalid-use-of-an-incomplete-type-that">this question</a> for further details).</p> <p>The solution is based on inherited constructors and the way functions calls are resolved.<br> Consider the following example:</p> <pre><code>#include &lt;utility&gt; #include &lt;iostream&gt; struct B { B(int y) noexcept: x{y} { } virtual void f() = 0; int x; }; struct D: public B { private: using B::B; public: template&lt;typename... Args&gt; D(Args... args) noexcept(noexcept(D{std::forward&lt;Args&gt;(args)...})) : B{std::forward&lt;Args&gt;(args)...} { } void f() override { std::cout &lt;&lt; x &lt;&lt; std::endl; } }; int main() { B *b = new D{42}; b-&gt;f(); } </code></pre> <p>I guess it's quite clear.<br> Anyway, let me know if you find that something needs more details and I'll be glad to update the answer.<br> The basic idea is that we can inherit directly the <code>noexcept</code> definition from the base class along with its constructors, so that we have no longer to refer to that class in our <code>noexcept</code> statements.</p> <p><a href="http://coliru.stacked-crooked.com/a/fdbd0c1c70e74f64" rel="nofollow">Here</a> you can see the above mentioned working example.</p> <p><strong>[EDIT]</strong></p> <p>As from the comments, the example suffers of a problem if the constructors of the base class and the derived one have the same signature.<br> Thank to Piotr Skotnicki for having pointed it out.<br> I'm going to mention those comments and I'll copy and paste the code proposed along with them (with a mention of the authors where needed).</p> <p>First of all, <a href="http://coliru.stacked-crooked.com/a/fe0fb0d62f8d2b95" rel="nofollow">here</a> we can see that the example as it is does not work as expected (thanks to Piotr Skotnicki for the link).<br> The code is almost the same previously posted, so it doesn't worth to copy and paste it here.<br> Also, from the same author, it follows an example <a href="http://coliru.stacked-crooked.com/a/7a7b48ef686cdc2a" rel="nofollow">that shows that the same solution works as expected under certain circumstances</a> (see the comments for furter details):</p> <pre><code>#include &lt;utility&gt; #include &lt;iostream&gt; struct B { B(int y) noexcept: x{y} { std::cout &lt;&lt; "B: Am I actually called?\n"; } virtual void f() = 0; int x; }; struct D: private B { private: using B::B; public: template&lt;typename... Args&gt; D(int a, Args&amp;&amp;... args) noexcept(noexcept(D{std::forward&lt;Args&gt;(args)...})) : B{std::forward&lt;Args&gt;(args)...} { std::cout &lt;&lt; "D: Am I actually called?\n"; } void f() override { std::cout &lt;&lt; x &lt;&lt; std::endl; } }; int main() { D* d = new D{71, 42}; (void)d; } </code></pre> <p>Also, I propose an alternative solution that is a bit more intrusive and is based on the idea for which the <code>std::allocator_arg_t</code> stands for, that is also the same proposed by Piotr Skotnicki in a comment:</p> <blockquote> <p>it's enough if derived class' constructor wins in overload resolution.</p> </blockquote> <p>It follows the code mentioned <a href="http://coliru.stacked-crooked.com/a/df24001de4f3f925" rel="nofollow">here</a>:</p> <pre><code>#include &lt;utility&gt; #include &lt;iostream&gt; struct B { B(int y) noexcept: x{y} { std::cout &lt;&lt; "B: Am I actually called?\n"; } virtual void f() = 0; int x; }; struct D: public B { private: using B::B; public: struct D_tag { }; template&lt;typename... Args&gt; D(D_tag, Args&amp;&amp;... args) noexcept(noexcept(D{std::forward&lt;Args&gt;(args)...})) : B{std::forward&lt;Args&gt;(args)...} { std::cout &lt;&lt; "D: Am I actually called?\n"; } void f() override { std::cout &lt;&lt; x &lt;&lt; std::endl; } }; int main() { D* d = new D{D::D_tag{}, 42}; (void)d; } </code></pre> <p>Thanks once more to Piotr Skotnicki for his help and comments, really appreciated.</p>