conv01.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 50 行

C
50
字号
#include "fail.h"

unsigned called;

template <class T>
    struct A {
	operator const T &() const;
	static const T r;
	A() {}
    };
template <class T>
    A<T>::operator const T &() const
    {
	if( called != 0 ) fail(__LINE__);
	++called;
	return r;
    }
template <class T>
    const T A<T>::r = 0;

template <class T>
    struct OP {
	static void op(const T &v)
	{
	    if( called != 1 ) fail(__LINE__);
	    ++called;
	}
    };

template <class T, class OP>
    struct Imp {
	void f(const T &t) {
	    if( called != 0 ) fail(__LINE__);
	    OP::op(t);
	    if( called != 2 ) fail(__LINE__);
	    ++called;
	}
    };

int main()
{
    typedef void *P;
    Imp< A<P>, OP<P> >  var;
    A<P> p;

    var.f( p );
    if( called != 3 ) fail(__LINE__);
    _PASS;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?