| // { dg-do run } |
| // Test that binfos aren't erroneously shared between instantiations. |
| |
| class PK_CryptoSystem |
| { |
| }; |
| class PK_Encryptor : public virtual PK_CryptoSystem |
| { |
| }; |
| class PK_FixedLengthCryptoSystem : public virtual PK_CryptoSystem |
| { |
| public: |
| virtual unsigned int CipherTextLength() const =0; |
| }; |
| class PK_FixedLengthEncryptor : public virtual PK_Encryptor, public virtual PK_FixedLengthCryptoSystem |
| { |
| }; |
| class PK_SignatureSystem |
| { |
| public: |
| virtual ~PK_SignatureSystem() {} |
| }; |
| class PK_Signer : public virtual PK_SignatureSystem |
| { |
| public: |
| virtual void Sign() = 0; |
| }; |
| class PK_Verifier : public virtual PK_SignatureSystem |
| { |
| }; |
| class PK_Precomputation |
| { |
| }; |
| template <class T> class |
| PK_WithPrecomputation : public T, public virtual PK_Precomputation |
| { |
| }; |
| typedef PK_WithPrecomputation<PK_FixedLengthEncryptor> PKWPFLE; |
| typedef PK_WithPrecomputation<PK_Signer> PKWPS; |
| template <class EC> class |
| ECPublicKey : public PKWPFLE |
| { |
| public: |
| unsigned int CipherTextLength() const { return 1; } |
| EC ec; |
| }; |
| template <class EC> |
| class ECPrivateKey : public ECPublicKey<EC>, public PKWPS |
| { |
| void Sign() {} |
| int d; |
| }; |
| template <class EC> |
| class ECKEP : public ECPrivateKey<EC> |
| { |
| }; |
| class GF2NT : public PK_CryptoSystem |
| { |
| int t1; |
| }; |
| class EC2N : public PK_CryptoSystem |
| { |
| GF2NT field; |
| int a; |
| }; |
| template class ECKEP<EC2N>; |
| template class ECKEP<int>; |
| |
| int |
| main () |
| { |
| ECKEP<EC2N> foo; |
| |
| return 0; |
| } |
| |