Here's an example: import std.typecons; //wrap import std.stdio; interface FooBar { public: void foo(); void bar(); final void both() // NVI { foo(); bar(); } } class Baz { public: void foo() { writeln("foo"); } void bar() { writeln("bar"); } } void main() { auto baz = new Baz(); auto foobar = baz.wrap!(FooBar)(); // causes this wall-o-text error -- http://pastebin.com/Pa5dHQtN // Which at the end says: // /usr/local/Cellar/dmd/2.064.2/import/std/typecons.d(2779): Error: static assert "Source Baz does not have structural conformance to (FooBar)" } It looks like wrap is trying to override the NVI method, but since it's final, it doesn't work.
PR https://github.com/dlang/phobos/pull/5858
This was actually a bug that prevented certain case of wrap to compile.
Commits pushed to master at https://github.com/dlang/phobos https://github.com/dlang/phobos/commit/c9f2158b59a460350e993a2deccad9dbcafc7a51 fix issue 12064 - std.typecons.wrap doesn't handle NVI https://github.com/dlang/phobos/commit/d1a0a32e7997a15b646bfff81e1514458ae6cf1f Merge pull request #5858 from BBasile/issue-12064 fix issue 12064 - std.typecons.wrap doesn't handle NVI merged-on-behalf-of: MetaLang <MetaLang@users.noreply.github.com>
Commits pushed to stable at https://github.com/dlang/phobos https://github.com/dlang/phobos/commit/c9f2158b59a460350e993a2deccad9dbcafc7a51 fix issue 12064 - std.typecons.wrap doesn't handle NVI https://github.com/dlang/phobos/commit/d1a0a32e7997a15b646bfff81e1514458ae6cf1f Merge pull request #5858 from BBasile/issue-12064