__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
{
public:
    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;
    m_t.foo(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.