http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58822
vlukas at gmx dot de changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |vlukas at gmx dot de --- Comment #26 from vlukas at gmx dot de --- I think the main.ii from 2013-10-23 can be reduced to this: ----------------------------------------------------------- struct Exception { Exception(int) {} }; template<typename Arg> int make_shared(Arg arg) { Exception* p = arg; p = p; return 0; } struct InvalidArgumentException : public virtual Exception { explicit InvalidArgumentException() : Exception(make_shared(this)) { } virtual ~InvalidArgumentException() noexcept {} }; int main() { throw InvalidArgumentException(); } ---------------------------------------------------------- I believe this violates a restriction of the Standard, namely section 3.8, paragraph 5, dash 3 (in the N3290 draft or in N3797). I can reproduce a segmentation fault with both my reduced testcase and the original main.ii. Mr. Henning, you could try the following: In your main.ii on line 24571 substitute the *implicit* cast by an explicit one, so that the line reads : Exception(std::make_shared<ExceptionImplBase>(static_cast<Exception*>(this))) Or replace the forbidden implicit cast by changing line 24556 so that it reads template<class E> explicit ExceptionImplBase(E const*) {} Both options fulfill the requirements of the Standard to the letter and on my system make the segmentation fault go away. Valgrind won't indicated an error with those modifications either.