1// { dg-do run } 2// Test that binfos aren't erroneously shared between instantiations. 3 4class PK_CryptoSystem 5{ 6}; 7class PK_Encryptor : public virtual PK_CryptoSystem 8{ 9}; 10class PK_FixedLengthCryptoSystem : public virtual PK_CryptoSystem 11{ 12public: 13 virtual unsigned int CipherTextLength() const =0; 14}; 15class PK_FixedLengthEncryptor : public virtual PK_Encryptor, public virtual PK_FixedLengthCryptoSystem 16{ 17}; 18class PK_SignatureSystem 19{ 20public: 21 virtual ~PK_SignatureSystem() {} 22}; 23class PK_Signer : public virtual PK_SignatureSystem 24{ 25public: 26 virtual void Sign() = 0; 27}; 28class PK_Verifier : public virtual PK_SignatureSystem 29{ 30}; 31class PK_Precomputation 32{ 33}; 34template <class T> class 35PK_WithPrecomputation : public T, public virtual PK_Precomputation 36{ 37}; 38typedef PK_WithPrecomputation<PK_FixedLengthEncryptor> PKWPFLE; 39typedef PK_WithPrecomputation<PK_Signer> PKWPS; 40template <class EC> class 41ECPublicKey : public PKWPFLE 42{ 43public: 44 unsigned int CipherTextLength() const { return 1; } 45 EC ec; 46}; 47template <class EC> 48class ECPrivateKey : public ECPublicKey<EC>, public PKWPS 49{ 50 void Sign() {} 51 int d; 52}; 53template <class EC> 54class ECKEP : public ECPrivateKey<EC> 55{ 56}; 57class GF2NT : public PK_CryptoSystem 58{ 59 int t1; 60}; 61class EC2N : public PK_CryptoSystem 62{ 63 GF2NT field; 64 int a; 65}; 66template class ECKEP<EC2N>; 67template class ECKEP<int>; 68 69int 70main () 71{ 72 ECKEP<EC2N> foo; 73 74 return 0; 75} 76 77