As far I know, your code is correct starting from C++17, wrong before.
This according P0522R0, that is part of new standard, where I see an example that is very, very similar to your code (see "overview"):
template <template <typename> class> void FD();
template <typename, typename = int> struct SD { /* ... */ };
FD<SD>(); // OK; error before this paper (CWG 150)
According the compiler support tables in ccpreference, g++ support P0522R0 from version 7, clang++ from version 4. So both compiler should support your code.
But looking the table in this page, the support for llvm (clang) 5 is defined "partial" and, according a note,
(12): Despite being the the resolution to a Defect Report, this feature is disabled by default in all language versions, and can be enabled explicitly with the flag -frelaxed-template-template-args in Clang 4 onwards. The change to the standard lacks a corresponding change for template partial ordering, resulting in ambiguity errors for reasonable and previously-valid code. This issue is expected to be rectified soon.
So, at your risk, you can try with the flag -frelaxed-template-template-args
.