[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

linking error for static member variables

aaragon

10/20/2008 12:43:00 AM

Hi everyone,

I have a linking error when using gcc4.2 and static member variables.
The class template definition is something around the following:

template<>
class Element<L2_t> : public Element_common<L2, Side<2,2> > {

public:

static const ubyte_t dim_ = 2;
static const ubyte_t num_nodes_ = 2;
static const ubyte_t gauss_pts_= 3;

// member functions
};

Undefined symbols:
"fea::Element<(fea::Element_type)1>::gauss_pts_", referenced from:
__ZN3fea7ElementILNS_12Element_typeE1EE10gauss_pts_E
$non_lazy_ptr in element.o
"fea::Element<(fea::Element_type)2>::gauss_pts_", referenced from:
__ZN3fea7ElementILNS_12Element_typeE2EE10gauss_pts_E
$non_lazy_ptr in element.o
"fea::Element<(fea::Element_type)3>::gauss_pts_", referenced from:
__ZN3fea7ElementILNS_12Element_typeE3EE10gauss_pts_E
$non_lazy_ptr in element.o
ld: symbol(s) not found

The strange thing is that I have many other static variables with the
same kind of definition (same type and const as you can see) but it
only complaints about the gauss_pts_ member variable. I solved the
problem by moving the definition to the cpp file as follows:

// in cpp file
const ubyte_t Element<L2_t>::gauss_pts_ = 3;

But I want to understand really what is happening here. When I compile
the code with gcc4.3, the problem disappears. So, is this a bug in the
compiler?

Thanks for the help,

aa
5 Answers

Victor Bazarov

10/20/2008 12:45:00 PM

0

aaragon wrote:
> I have a linking error when using gcc4.2 and static member variables.
> The class template definition is something around the following:
>
> template<>
> class Element<L2_t> : public Element_common<L2, Side<2,2> > {
>
> public:
>
> static const ubyte_t dim_ = 2;
> static const ubyte_t num_nodes_ = 2;
> static const ubyte_t gauss_pts_= 3;

WTH is 'ubyte_t'?

>
> // member functions
> };
>
> Undefined symbols:
> "fea::Element<(fea::Element_type)1>::gauss_pts_", referenced from:
> __ZN3fea7ElementILNS_12Element_typeE1EE10gauss_pts_E
> $non_lazy_ptr in element.o
> "fea::Element<(fea::Element_type)2>::gauss_pts_", referenced from:
> __ZN3fea7ElementILNS_12Element_typeE2EE10gauss_pts_E
> $non_lazy_ptr in element.o
> "fea::Element<(fea::Element_type)3>::gauss_pts_", referenced from:
> __ZN3fea7ElementILNS_12Element_typeE3EE10gauss_pts_E
> $non_lazy_ptr in element.o
> ld: symbol(s) not found
>
> The strange thing is that I have many other static variables with the
> same kind of definition (same type and const as you can see) but it
> only complaints about the gauss_pts_ member variable. I solved the
> problem by moving the definition to the cpp file as follows:
>
> // in cpp file
> const ubyte_t Element<L2_t>::gauss_pts_ = 3;
>
> But I want to understand really what is happening here.

Not much. Any static member variable/constant has to be defined if used
outside of the class. Since you didn't show us how those constants are
used, the assumption is that they *are* used outside and *must* be
defined or you're in violation of the ODR.

> When I compile
> the code with gcc4.3, the problem disappears. So, is this a bug in the
> compiler?

Not from where I sit.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask

aaragon

10/20/2008 7:10:00 PM

0

On Oct 20, 7:45 am, Victor Bazarov <v.Abaza...@comAcast.net> wrote:
> aaragon wrote:
> > I have a linking error when using gcc4.2 and static member variables.
> > The class template definition is something around the following:
>
> >    template<>
> >    class Element<L2_t> : public Element_common<L2, Side<2,2> > {
>
> >    public:
>
> >            static const ubyte_t dim_ = 2;
> >            static const ubyte_t num_nodes_ = 2;
> >            static const ubyte_t gauss_pts_= 3;
>
> WTH is 'ubyte_t'?
>
>
>

just a type definition to cope with the way I name things.

>
>
> >         // member functions
> >         };
>
> > Undefined symbols:
> >   "fea::Element<(fea::Element_type)1>::gauss_pts_", referenced from:
> >       __ZN3fea7ElementILNS_12Element_typeE1EE10gauss_pts_E
> > $non_lazy_ptr in element.o
> >   "fea::Element<(fea::Element_type)2>::gauss_pts_", referenced from:
> >       __ZN3fea7ElementILNS_12Element_typeE2EE10gauss_pts_E
> > $non_lazy_ptr in element.o
> >   "fea::Element<(fea::Element_type)3>::gauss_pts_", referenced from:
> >       __ZN3fea7ElementILNS_12Element_typeE3EE10gauss_pts_E
> > $non_lazy_ptr in element.o
> > ld: symbol(s) not found
>
> > The strange thing is that I have many other static variables with the
> > same kind of definition (same type and const as you can see) but it
> > only complaints about the gauss_pts_ member variable. I solved the
> > problem by moving the definition to the cpp file as follows:
>
> >         // in cpp file
> >    const ubyte_t Element<L2_t>::gauss_pts_ = 3;
>
> > But I want to understand really what is happening here.
>
> Not much.  Any static member variable/constant has to be defined if used
> outside of the class.  Since you didn't show us how those constants are
> used, the assumption is that they *are* used outside and *must* be
> defined or you're in violation of the ODR.
>


It is defined, when inside a class you do something like

static const int test = 2;

you're defining inline the value of the constant. That is exacly what
I was doing before, but the linker couldn't find it. Weird thing is
that only happened with one varible, the other static constants were
defined in the same way, but they didn't give me problems. So there
must be a problem with the copmiler.


>  > When I compile
>
> > the code with gcc4.3, the problem disappears. So, is this a bug in the
> > compiler?
>
> Not from where I sit.
>
> V
> --
> Please remove capital 'A's when replying by e-mail
> I do not respond to top-posted replies, please don't ask

Victor Bazarov

10/20/2008 7:39:00 PM

0

aaragon wrote:
> On Oct 20, 7:45 am, Victor Bazarov <v.Abaza...@comAcast.net> wrote:
>> aaragon wrote:
>>> I have a linking error when using gcc4.2 and static member variables.
>>> The class template definition is something around the following:
>>> template<>
>>> class Element<L2_t> : public Element_common<L2, Side<2,2> > {
>>> public:
>>> static const ubyte_t dim_ = 2;
>>> static const ubyte_t num_nodes_ = 2;
>>> static const ubyte_t gauss_pts_= 3;
>> WTH is 'ubyte_t'?
>>
>>
>>
>
> just a type definition to cope with the way I name things.

Well, the language prohibits initialisations of static const data
members *unless* they are of an *integral type*. If your 'ubyte_t' is
not integral, your code is ill-formed.

>>> // member functions
>>> };
>>> Undefined symbols:
>>> "fea::Element<(fea::Element_type)1>::gauss_pts_", referenced from:
>>> __ZN3fea7ElementILNS_12Element_typeE1EE10gauss_pts_E
>>> $non_lazy_ptr in element.o
>>> "fea::Element<(fea::Element_type)2>::gauss_pts_", referenced from:
>>> __ZN3fea7ElementILNS_12Element_typeE2EE10gauss_pts_E
>>> $non_lazy_ptr in element.o
>>> "fea::Element<(fea::Element_type)3>::gauss_pts_", referenced from:
>>> __ZN3fea7ElementILNS_12Element_typeE3EE10gauss_pts_E
>>> $non_lazy_ptr in element.o
>>> ld: symbol(s) not found
>>> The strange thing is that I have many other static variables with the
>>> same kind of definition (same type and const as you can see) but it
>>> only complaints about the gauss_pts_ member variable. I solved the
>>> problem by moving the definition to the cpp file as follows:
>>> // in cpp file
>>> const ubyte_t Element<L2_t>::gauss_pts_ = 3;
>>> But I want to understand really what is happening here.
>> Not much. Any static member variable/constant has to be defined if used
>> outside of the class. Since you didn't show us how those constants are
>> used, the assumption is that they *are* used outside and *must* be
>> defined or you're in violation of the ODR.
>>
>
>
> It is defined, when inside a class you do something like
>
> static const int test = 2;
>
> you're defining inline the value of the constant.

Nope. It's declared and initialised. It's not defined. It's only
defined when you can say that the memory for it is allocated and *where*
it is allocated. Unless you do

const int <classname>::test;

in the *namespace* scope somewhere in a translation unit, the data
member is *undefined*.

> That is exacly what
> I was doing before, but the linker couldn't find it. Weird thing is
> that only happened with one varible, the other static constants were
> defined in the same way, but they didn't give me problems. So there
> must be a problem with the copmiler.

Sure. What else could it be?.. Stupid compilers!

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask

aaragon

10/20/2008 8:26:00 PM

0

On Oct 20, 2:38 pm, Victor Bazarov <v.Abaza...@comAcast.net> wrote:
> aaragon wrote:
> > On Oct 20, 7:45 am, Victor Bazarov <v.Abaza...@comAcast.net> wrote:
> >> aaragon wrote:
> >>> I have a linking error when using gcc4.2 and static member variables.
> >>> The class template definition is something around the following:
> >>>    template<>
> >>>    class Element<L2_t> : public Element_common<L2, Side<2,2> > {
> >>>    public:
> >>>            static const ubyte_t dim_ = 2;
> >>>            static const ubyte_t num_nodes_ = 2;
> >>>            static const ubyte_t gauss_pts_= 3;
> >> WTH is 'ubyte_t'?
>
> > just a type definition to cope with the way I name things.
>
> Well, the language prohibits initialisations of static const data
> members *unless* they are of an *integral type*.  If your 'ubyte_t' is
> not integral, your code is ill-formed.
>

u_byte is just a type definition for an unsigned short, which is of an
integral type. The rest of the static constant member variables were
also of the same type but only this one game the problem. Weird.

>
>
> >>>         // member functions
> >>>         };
> >>> Undefined symbols:
> >>>   "fea::Element<(fea::Element_type)1>::gauss_pts_", referenced from:
> >>>       __ZN3fea7ElementILNS_12Element_typeE1EE10gauss_pts_E
> >>> $non_lazy_ptr in element.o
> >>>   "fea::Element<(fea::Element_type)2>::gauss_pts_", referenced from:
> >>>       __ZN3fea7ElementILNS_12Element_typeE2EE10gauss_pts_E
> >>> $non_lazy_ptr in element.o
> >>>   "fea::Element<(fea::Element_type)3>::gauss_pts_", referenced from:
> >>>       __ZN3fea7ElementILNS_12Element_typeE3EE10gauss_pts_E
> >>> $non_lazy_ptr in element.o
> >>> ld: symbol(s) not found
> >>> The strange thing is that I have many other static variables with the
> >>> same kind of definition (same type and const as you can see) but it
> >>> only complaints about the gauss_pts_ member variable. I solved the
> >>> problem by moving the definition to the cpp file as follows:
> >>>         // in cpp file
> >>>    const ubyte_t Element<L2_t>::gauss_pts_ = 3;
> >>> But I want to understand really what is happening here.
> >> Not much.  Any static member variable/constant has to be defined if used
> >> outside of the class.  Since you didn't show us how those constants are
> >> used, the assumption is that they *are* used outside and *must* be
> >> defined or you're in violation of the ODR.
>
> > It is defined, when inside a class you do something like
>
> >    static const int test = 2;
>
> > you're defining inline the value of the constant.
>
> Nope.  It's declared and initialised.  It's not defined.  It's only
> defined when you can say that the memory for it is allocated and *where*
> it is allocated.  Unless you do
>
>    const int <classname>::test;
>
> in the *namespace* scope somewhere in a translation unit, the data
> member is *undefined*.
>
>  > That is exacly what
>
> > I was doing before, but the linker couldn't find it. Weird thing is
> > that only happened with one varible, the other static constants were
> > defined in the same way, but they didn't give me problems. So there
> > must be a problem with the copmiler.
>
> Sure.  What else could it be?..  Stupid compilers!

Indeed, stupid compilers!

>
> V
> --
> Please remove capital 'A's when replying by e-mail
> I do not respond to top-posted replies, please don't ask

Thanks for answering my post.

aa

Naked Gonad

10/21/2008 8:18:00 PM

0

Sir John Howard wrote:
> Panta Rhei is a Grik wog and completely inept stalker with no penis!
> LOL wrote:
>
>> On Tue, 21 Oct 2008 09:00:37 +0100, Naked Gonad
>> <bodron57@tiscali.co.uk> wrote:
>>
>>> Eli Grubman wrote:
>>>> On Tue, 21 Oct 2008 08:41:19 +0100, Naked Gonad
>>>> <bodron57@tiscali.co.uk> wrote:
>>>>
>>>>> Eli Grubman wrote:
>>>>>> On Mon, 20 Oct 2008 13:04:58 +0100, Naked Gonad
>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>
>>>>>>> Eli Grubman wrote:
>>>>>>>> On Mon, 20 Oct 2008 10:11:55 +0100, Naked Gonad
>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>
>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>> On Mon, 20 Oct 2008 09:50:17 +0100, Naked Gonad
>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>
>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>> On Sun, 19 Oct 2008 14:51:22 +0100, Naked Gonad
>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>> On Sun, 19 Oct 2008 11:00:50 +0100, Naked Gonad
>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>> On Sat, 18 Oct 2008 13:13:54 +0100, Naked Gonad
>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>> On Sat, 18 Oct 2008 12:42:24 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>> On Sat, 18 Oct 2008 12:13:58 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>> On Sat, 18 Oct 2008 09:00:15 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>> On Fri, 17 Oct 2008 20:59:08 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, 17 Oct 2008 19:53:22 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, 17 Oct 2008 18:36:10 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, 17 Oct 2008 17:36:32 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, 17 Oct 2008 17:23:41 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, 17 Oct 2008 16:39:43 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, 17 Oct 2008 16:12:19 +0100, "Peter Hucker" <none@spam.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, 14 Oct 2008 17:49:14 +0100, Eli Grubman <eli.grubman@googlemail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, 14 Oct 2008 17:13:41 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, 14 Oct 2008 15:54:48 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, 14 Oct 2008 14:51:44 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eli Grubman wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, 14 Oct 2008 14:11:29 +0100, Naked Gonad
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <bodron57@tiscali.co.uk> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> You should have gone to Spec...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Couldn't find it without my glasses.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Ah, they don't tell you that in the commercial.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Yeh, it's especially difficult for me because my
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> guide dog is blind as well.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> He should have gone to Spec...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> But he's stupid.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> You don't need a lot of smarts to be a guide dog.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Smarties indeed, didn't you know they rear them on maltesers nowadays?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Isn't rearing dogs bestiality?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Only if you're caught.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Rearing them with Maltesers is even worse.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Do they melt in your mouth and not up your arse?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Not if used for rearing.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> More filth.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Yes please.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Greedy bugger.
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Greed is good.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Yum yum.
>>>>>>>>>>>>>>>>>>>>>>>>>> Sloth is better.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Greed + Sloth = Yum Yum.
>>>>>>>>>>>>>>>>>>>>>>>> What about Greed + Sloth + Envy + Pride?
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Equals a person with serious issues and they should kill theirself
>>>>>>>>>>>>>>>>>>>>>>> immediately.......if not sooner.
>>>>>>>>>>>>>>>>>>>>>> What's a Deadly Sin or two between friends?
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Murder?
>>>>>>>>>>>>>>>>>>>> Mortal, usually fatal, but not Deadly.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Killed with love?
>>>>>>>>>>>>>>>>>> Smothered.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Sat on face?
>>>>>>>>>>>>>>>> Tom Tom!
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I don't know who it was.
>>>>>>>>>>>>>> Was it a Navvy?
>>>>>>>>>>>>>>
>>>>>>>>>>>>> It was a hairy arse.
>>>>>>>>>>>> Cleavage?
>>>>>>>>>>>>
>>>>>>>>>>> No, I've had my tits removed.
>>>>>>>>>> Colon cancer?
>>>>>>>>>>
>>>>>>>>> Colon Powell.
>>>>>>>> The Black Death?
>>>>>>>>
>>>>>>> Is that his nickname?
>>>>>> No, that was "Colon Bowel".
>>>>>>
>>>>> Oh yes, the one who talks crap.
>>>> And is full of shit.
>>>>
>>> Sounds like he needs a collonic quick.
>> Raise the Thames Barrier!
>
> Are you Poms looking forward to the great flood?

I think you could do with one.Are you looking forward to more drought?