__restrict keyword causes error: no instance of overloaded function matches the argument list

Problem : 

The following code fails to compile with Intel C++ compiler.


template< class T >
class C
    void foo();
    void foo(const T& src);

struct B
    int a;
    int b;
class A {
    void bar();
    C<B *> m_t;

void A::bar()
    B * __restrict p;


Environment : 

Windows, Microsoft* Visual Studio 2005*, Microsoft Visual Studio 2008*

Root Cause : 

__restrict keyword was not handle properly

Resolution : 

Resolve in the latest version of Intel C++ Compiler 11.1.

Workaround, remove __restrict.

For more complete information about compiler optimizations, see our Optimization Notice.