Invalid use of non-static member of struct nested inside of class template


In clang 3.6.2, the following code results in a compilation error:

template <typename T=void>
class bar
    struct foo
        int array[10];

    int baz()
        return sizeof(foo::array);

int main(void)
    bar<> b;
    return b.baz();

$ clang++ -std=c++11 nonstatic.cpp -o nonstatic
nonstatic.cpp:12:28: error: invalid use of non-static data member 'array'
        return sizeof(foo::array);
nonstatic.cpp:20:14: note: in instantiation of member function
'bar<void>::baz' requested here
    return b.baz();
1 error generated.

If `bar` is no longer a template (just remove the first line and the
angle brackets in `bar<> b;`), then the code compiles cleanly. I get
the same error in both clang 3.6.2 final and 3.8.0-svn257294-1~exp1.
The same code also compiles cleanly in gcc version 5.2.1.

It seems strange to me that this would result in an error, but I have
not yet tried to see what the standard says. Can anyone with confirm
whether this code should be valid or not?

Version details:

$ clang++ --version
Ubuntu clang version 3.6.2-1 (tags/RELEASE_362/final) (based on LLVM 3.6.2)
Target: x86_64-pc-linux-gnu
Thread model: posix